From a40e4aedc66185872e181882f8400eb0e0838e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Christiansen=20S=C3=B8rby?= Date: Thu, 14 Oct 2021 21:01:30 +0200 Subject: [PATCH 01/14] Add a nix flake setup --- .envrc | 6 + .github/workflows/nix.yml | 24 + .gitignore | 1 - Cargo.lock | 1098 +++++++++++++++++++++++++++++++++++++ flake.lock | 101 ++++ flake.nix | 53 ++ 6 files changed, 1282 insertions(+), 1 deletion(-) create mode 100644 .envrc create mode 100644 .github/workflows/nix.yml create mode 100644 Cargo.lock create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..7c7e8995 --- /dev/null +++ b/.envrc @@ -0,0 +1,6 @@ +use_flake() { + watch_file flake.nix + watch_file flake.lock + eval "$(nix print-dev-env)" +} +use flake diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 00000000..1dcbace9 --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,24 @@ +name: "Nix flakes CI" +on: + pull_request: + push: + branches: + - main +jobs: + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2.3.4 + - uses: cachix/install-nix-action@v13 + with: + install_url: https://nixos-nix-install-tests.cachix.org/serve/i6laym9jw3wg9mw6ncyrk6gjx4l34vvx/install + install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve' + extra_nix_config: | + experimental-features = nix-command flakes + access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} + - uses: cachix/cachix-action@v10 + with: + name: yatima + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - run: nix build + - run: nix flake check diff --git a/.gitignore b/.gitignore index bda71a26..cc563fb6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ target -Cargo.lock *.bk .idea diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..9902ff86 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1098 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake2b_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "constant_time_eq", +] + +[[package]] +name = "blake3" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcd555c66291d5f836dbb6883b48660ece810fe25a31f3bdfb911945dff2691f" +dependencies = [ + "arrayref", + "arrayvec 0.7.1", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538" + +[[package]] +name = "byte-slice-cast" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0796d76a983651b4a0ddda16203032759f2fd9103d9181f7c65c06ee8872e6" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cast" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "cc" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "bitflags", + "textwrap", + "unicode-width", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] +name = "criterion" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +dependencies = [ + "atty", + "cast", + "clap", + "criterion-plot", + "csv", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +dependencies = [ + "cfg-if", + "lazy_static", +] + +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr", + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctor" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "diff" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "half" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac5956d4e63858efaec57e0d6c1c2f6a41e1487f830314a324ccd7e2223a7ca0" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5dacb10c5b3bb92d46ba347505a9041e676bb20ad220101326bffb0c93031ee" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "itertools" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "js-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "memoffset" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +dependencies = [ + "autocfg", +] + +[[package]] +name = "multihash" +version = "0.15.0" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "blake3", + "criterion", + "digest", + "generic-array", + "hex", + "multihash-derive", + "parity-scale-codec", + "quickcheck", + "rand", + "serde", + "serde_json", + "sha-1", + "sha2", + "sha3", + "strobe-rs", + "unsigned-varint", +] + +[[package]] +name = "multihash-derive" +version = "0.7.2" +dependencies = [ + "multihash", + "pretty_assertions", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "output_vt100" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +dependencies = [ + "winapi", +] + +[[package]] +name = "parity-scale-codec" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" +dependencies = [ + "arrayvec 0.7.1", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "plotters" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" + +[[package]] +name = "plotters-svg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ca011bd0129ff4ae15cd04c4eef202cadf6c51c21e47aba319b4e0501db741" + +[[package]] +name = "pretty_assertions" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0cfe1b2403f172ba0f234e500906ee0a3e493fb81092dac23ebefe129301cc" +dependencies = [ + "ansi_term", + "ctor", + "diff", + "output_vt100", +] + +[[package]] +name = "proc-macro-crate" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quickcheck" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44883e74aa97ad63db83c4bf8ca490f02b2fc02f92575e720c8551e843c945f" +dependencies = [ + "env_logger", + "log", + "rand", + "rand_core", +] + +[[package]] +name = "quote" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom", + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[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", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rayon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" + +[[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha-1" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer", + "digest", + "keccak", + "opaque-debug", +] + +[[package]] +name = "strobe-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120a04607c28f102213fb2f0f15e034b56d05b6186c8f33ea0a286cd6050a16e" +dependencies = [ + "bitflags", + "byteorder", + "keccak", + "subtle", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "typenum" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "unsigned-varint" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f8d425fafb8cd76bc3f22aace4af471d3156301d7508f2107e98fbeae10bc7f" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasm-bindgen" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" + +[[package]] +name = "web-sys" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..ba01b81c --- /dev/null +++ b/flake.lock @@ -0,0 +1,101 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1631561581, + "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "naersk": { + "inputs": { + "nixpkgs": [ + "utils", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1618844365, + "narHash": "sha256-Z9t0rr+5OG/ru3jdg3jivfYVU4ydV/nqt8UwIut7uHs=", + "owner": "yatima-inc", + "repo": "naersk", + "rev": "32e3ba39d9d83098b13720a4384bdda191dd0445", + "type": "github" + }, + "original": { + "owner": "yatima-inc", + "repo": "naersk", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1634236605, + "narHash": "sha256-EYqCZGlmcYVAhiK5LkmEaRXFbg9ceTV4ho9BBCCTcYA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "13b2a8a11856ab8ba50d83a8431084724490b34e", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "utils": { + "inputs": { + "flake-utils": "flake-utils_2", + "naersk": "naersk", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1634237493, + "narHash": "sha256-kVqB9ZdfWdfh7Cw71KtcV2pDNlSybxG2WshGMnHdXxQ=", + "owner": "yatima-inc", + "repo": "nix-utils", + "rev": "e4e10de1fb3dfdafcf4e47fdd70eb34df8f826d1", + "type": "github" + }, + "original": { + "owner": "yatima-inc", + "repo": "nix-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..8a3d3455 --- /dev/null +++ b/flake.nix @@ -0,0 +1,53 @@ +{ + description = "TODO Description"; + inputs = { + nixpkgs.url = github:nixos/nixpkgs; + flake-utils = { + url = github:numtide/flake-utils; + inputs.nixpkgs.follows = "nixpkgs"; + }; + utils = { + url = github:yatima-inc/nix-utils; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { self + , nixpkgs + , flake-utils + , utils + }: + flake-utils.lib.eachDefaultSystem (system: + let + lib = utils.lib.${system}; + pkgs = import nixpkgs { inherit system; }; + inherit (lib) buildRustProject testRustProject rustDefault filterRustProject; + rust = rustDefault; + crateName = "rust-multihash"; + root = ./.; + project = buildRustProject { inherit root; }; + in + { + packages.${crateName} = project; + checks.${crateName} = testRustProject { doCheck = true; inherit root; }; + + defaultPackage = self.packages.${system}.${crateName}; + + # To run with `nix run` + apps.${crateName} = flake-utils.lib.mkApp { + drv = project; + }; + + # `nix develop` + devShell = pkgs.mkShell { + inputsFrom = builtins.attrValues self.packages.${system}; + nativeBuildInputs = [ rust ]; + buildInputs = with pkgs; [ + rust-analyzer + clippy + rustfmt + ]; + }; + }); +} From 950ce11ade5f565b02260ed19678a1e93c5d2f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Christiansen=20S=C3=B8rby?= Date: Thu, 14 Oct 2021 21:12:03 +0200 Subject: [PATCH 02/14] Update description --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 8a3d3455..f00fd72a 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "TODO Description"; + description = "Rust multihash implementation"; inputs = { nixpkgs.url = github:nixos/nixpkgs; flake-utils = { From 2ec58b6e78446b89e4832e8b137da188bc4366a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Christiansen=20S=C3=B8rby?= Date: Thu, 14 Oct 2021 22:51:37 +0200 Subject: [PATCH 03/14] Fix nix flake check --- .github/workflows/nix.yml | 11 +++++++++-- flake.lock | 18 ++++++++++-------- flake.nix | 30 ++++++++++++++++++++++++------ 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 1dcbace9..78a491f9 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -4,9 +4,12 @@ on: push: branches: - main + - master jobs: tests: runs-on: ubuntu-latest + env: + NIX_BUILD_ARGS: -v --print-build-logs --fallback --show-trace steps: - uses: actions/checkout@v2.3.4 - uses: cachix/install-nix-action@v13 @@ -20,5 +23,9 @@ jobs: with: name: yatima authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - run: nix build - - run: nix flake check + - name: Nix build + run: nix build $NIX_BUILD_ARGS + - name: Nix check + run: nix flake check $NIX_BUILD_ARGS + - name: Nix shell + run: nix shell $NIX_BUILD_ARGS --command echo OK diff --git a/flake.lock b/flake.lock index ba01b81c..f90eb386 100644 --- a/flake.lock +++ b/flake.lock @@ -33,7 +33,6 @@ "naersk": { "inputs": { "nixpkgs": [ - "utils", "nixpkgs" ] }, @@ -53,11 +52,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1634236605, - "narHash": "sha256-EYqCZGlmcYVAhiK5LkmEaRXFbg9ceTV4ho9BBCCTcYA=", + "lastModified": 1634238079, + "narHash": "sha256-TMYcwX6srjt+DbZx4LHWWGUQPE1jFRDvHtVHISoyEzE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "13b2a8a11856ab8ba50d83a8431084724490b34e", + "rev": "c254c77513d68256f22014c733d937a5d7554f7d", "type": "github" }, "original": { @@ -69,6 +68,7 @@ "root": { "inputs": { "flake-utils": "flake-utils", + "naersk": "naersk", "nixpkgs": "nixpkgs", "utils": "utils" } @@ -76,17 +76,19 @@ "utils": { "inputs": { "flake-utils": "flake-utils_2", - "naersk": "naersk", + "naersk": [ + "naersk" + ], "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1634237493, - "narHash": "sha256-kVqB9ZdfWdfh7Cw71KtcV2pDNlSybxG2WshGMnHdXxQ=", + "lastModified": 1634241547, + "narHash": "sha256-Mc4MremspwPgYpopOLeDxZBLewWCSJp/K6R3tFR52F0=", "owner": "yatima-inc", "repo": "nix-utils", - "rev": "e4e10de1fb3dfdafcf4e47fdd70eb34df8f826d1", + "rev": "b5b7817c29858401259b3076fc987e8426fb8a4a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f00fd72a..f368229e 100644 --- a/flake.nix +++ b/flake.nix @@ -6,9 +6,14 @@ url = github:numtide/flake-utils; inputs.nixpkgs.follows = "nixpkgs"; }; + naersk = { + url = github:yatima-inc/naersk; + inputs.nixpkgs.follows = "nixpkgs"; + }; utils = { url = github:yatima-inc/nix-utils; inputs.nixpkgs.follows = "nixpkgs"; + inputs.naersk.follows = "naersk"; }; }; @@ -17,20 +22,33 @@ , nixpkgs , flake-utils , utils + , naersk }: - flake-utils.lib.eachDefaultSystem (system: + let + # Only use the supported systems + supportedSystems = builtins.attrNames naersk.lib; + in + flake-utils.lib.eachSystem supportedSystems (system: let lib = utils.lib.${system}; pkgs = import nixpkgs { inherit system; }; - inherit (lib) buildRustProject testRustProject rustDefault filterRustProject; - rust = rustDefault; + inherit (lib) buildRustProject testRustProject getRust; + rustNightly = getRust { date = "2021-10-13"; sha256 = "2hYUzd1vkONFeibPF2ZVOWR5LhKGecA0+Dq4/fTyNMg="; }; crateName = "rust-multihash"; root = ./.; - project = buildRustProject { inherit root; }; + project = buildRustProject { inherit root; rust = rustNightly; }; in { packages.${crateName} = project; - checks.${crateName} = testRustProject { doCheck = true; inherit root; }; + checks.${crateName} = testRustProject { + inherit root; + rust = rustNightly; + # Avoid unstable_options in test + cargoOptions = opt: []; + cargoBuildOptions = opt: [ "-Z unstable-options" ] ++ opt; + cargoTestOptions = opt: [ "--all-features" ] ++ opt; + + }; defaultPackage = self.packages.${system}.${crateName}; @@ -42,7 +60,7 @@ # `nix develop` devShell = pkgs.mkShell { inputsFrom = builtins.attrValues self.packages.${system}; - nativeBuildInputs = [ rust ]; + nativeBuildInputs = [ rustNightly ]; buildInputs = with pkgs; [ rust-analyzer clippy From 2f047fce8cc15f34259ba09b581dd6977988393d Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Wed, 27 Oct 2021 11:21:22 -0400 Subject: [PATCH 04/14] Add core IO using core2 crate --- Cargo.lock | 12 ++++++++++++ Cargo.toml | 2 ++ src/error.rs | 16 ++++++++++++++-- src/hasher.rs | 15 ++++++++++++--- src/lib.rs | 24 ++++++++++++++++++++++++ src/multihash.rs | 45 ++++++++++++++++++++++++++++----------------- 6 files changed, 92 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9902ff86..61e0b133 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "aho-corasick" version = "0.7.18" @@ -178,6 +180,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "core2" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cf12d2dad3ed124aa116f59561428478993d69ab81ae4d30e5349c9c5b5a5f6" +dependencies = [ + "memchr", +] + [[package]] name = "cpufeatures" version = "0.2.1" @@ -457,6 +468,7 @@ dependencies = [ "blake2b_simd", "blake2s_simd", "blake3", + "core2", "criterion", "digest", "generic-array", diff --git a/Cargo.toml b/Cargo.toml index 8044089f..3b42d247 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -50,6 +50,8 @@ sha-2 = { version = "0.9.0", default-features = false, optional = true, package sha-3 = { version = "0.9.0", default-features = false, optional = true, package = "sha3" } strobe-rs = { version = "0.6.2", default-features = false, optional = true } +core2 = { version = "0.3", default-features = false, features = ["alloc"] } + [dev-dependencies] criterion = "0.3.3" hex = "0.4.2" diff --git a/src/error.rs b/src/error.rs index e912900f..dfb5ac77 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,5 +1,8 @@ #[cfg(feature = "std")] use std::io::Error as IoError; +#[cfg(not(feature = "std"))] +use core2::io::Error as IoError; + use unsigned_varint::decode::Error as DecodeError; #[cfg(feature = "std")] use unsigned_varint::io::ReadError; @@ -8,7 +11,6 @@ use unsigned_varint::io::ReadError; #[derive(Debug)] pub enum Error { /// Io error. - #[cfg(feature = "std")] Io(IoError), /// Unsupported multihash code. UnsupportedCode(u64), @@ -21,7 +23,7 @@ pub enum Error { impl core::fmt::Display for Error { fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { match self { - #[cfg(feature = "std")] + //#[cfg(feature = "std")] Self::Io(err) => write!(f, "{}", err), Self::UnsupportedCode(code) => write!(f, "Unsupported multihash code {}.", code), Self::InvalidSize(size) => write!(f, "Invalid multihash size {}.", size), @@ -33,6 +35,16 @@ impl core::fmt::Display for Error { #[cfg(feature = "std")] impl std::error::Error for Error {} +#[cfg(not(feature = "std"))] +impl core2::error::Error for Error {} + +#[cfg(not(feature = "std"))] +impl From for Error { + fn from(err: core2::io::Error) -> Self { + Self::Io(err) + } +} + #[cfg(feature = "std")] impl From for Error { fn from(err: IoError) -> Self { diff --git a/src/hasher.rs b/src/hasher.rs index dd224488..4d90705e 100644 --- a/src/hasher.rs +++ b/src/hasher.rs @@ -3,6 +3,12 @@ use core::fmt::Debug; use generic_array::typenum::marker_traits::Unsigned; use generic_array::{ArrayLength, GenericArray}; +#[cfg(feature = "std")] +use std::io; + +#[cfg(not(feature = "std"))] +use core2::io; + /// Size marker trait. pub trait Size: ArrayLength + Debug + Default + Eq + core::hash::Hash + Send + Sync + 'static @@ -48,12 +54,15 @@ pub trait Digest: /// Reads a multihash digest from a byte stream that contains the digest prefixed with the size. /// /// The byte stream must not contain the code as prefix. - #[cfg(feature = "std")] fn from_reader(mut r: R) -> Result where - R: std::io::Read, + R: io::Read, { - use unsigned_varint::io::read_u64; + #[cfg(not(feature = "std"))] + use crate::varint_read_u64 as read_u64; + + #[cfg(feature = "std")] + use unsigned_varint::io::read_u64; let size = read_u64(&mut r)?; if size > S::to_u64() || size > u8::max_value() as u64 { diff --git a/src/lib.rs b/src/lib.rs index 50d0b190..047f9020 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -53,6 +53,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #[cfg(not(feature = "std"))] +#[macro_use] extern crate alloc; #[cfg(any(test, feature = "arb"))] @@ -92,3 +93,26 @@ pub use crate::hasher_impl::sha3::{Sha3Digest, Sha3_224, Sha3_256, Sha3_384, Sha #[cfg(feature = "strobe")] pub use crate::hasher_impl::strobe::{Strobe256, Strobe512, StrobeDigest, StrobeHasher}; pub use crate::hasher_impl::unknown::UnknownDigest; + +#[cfg(feature = "std")] +use std::io; +#[cfg(not(feature = "std"))] +use core2::io; + +use unsigned_varint::{encode, decode}; + +/// Reader function from unsigned_varint +pub fn varint_read_u64(mut r: R) -> Result { + let mut b = encode::u64_buffer(); + for i in 0..b.len() { + let n = r.read(&mut (b[i..i + 1]))?; + if n == 0 { + return Err(error::Error::Varint(decode::Error::Insufficient)); + } + else if decode::is_last(b[i]) { + return Ok(decode::u64(&b[..=i]).unwrap().0); + } + } + Err(error::Error::Varint(decode::Error::Overflow)) +} + diff --git a/src/multihash.rs b/src/multihash.rs index 4d2b73d9..e8cd7b65 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -1,11 +1,19 @@ use crate::hasher::{Digest, Size}; use crate::Error; +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; use core::convert::TryFrom; -#[cfg(feature = "std")] + use core::convert::TryInto; use core::fmt::Debug; use generic_array::{ArrayLength, GenericArray}; +#[cfg(feature = "std")] +use std::io; + +#[cfg(not(feature = "std"))] +use core2::io; + /// Trait that implements hashing. /// /// It is usually implemented by a custom code table enum that derives the [`Multihash` derive]. @@ -118,8 +126,7 @@ impl Multihash { } /// Reads a multihash from a byte stream. - #[cfg(feature = "std")] - pub fn read(r: R) -> Result + pub fn read(r: R) -> Result where Self: Sized, { @@ -131,7 +138,6 @@ impl Multihash { /// /// You need to make sure the passed in bytes have the correct length. The digest length /// needs to match the `size` value of the multihash. - #[cfg(feature = "std")] pub fn from_bytes(mut bytes: &[u8]) -> Result where Self: Sized, @@ -148,15 +154,13 @@ impl Multihash { } /// Writes a multihash to a byte stream. - #[cfg(feature = "std")] - pub fn write(&self, w: W) -> Result<(), Error> { + pub fn write(&self, w: W) -> Result<(), Error> { write_multihash(w, self.code(), self.size(), self.digest()) } /// Returns the bytes of a multihash. - #[cfg(feature = "std")] pub fn to_bytes(&self) -> Vec { - let mut bytes = Vec::with_capacity(self.size().into()); + let mut bytes: Vec = Vec::with_capacity(self.size().into()); self.write(&mut bytes) .expect("writing to a vec should never fail"); bytes @@ -172,7 +176,6 @@ impl core::hash::Hash for Multihash { } } -#[cfg(feature = "std")] impl From> for Vec { fn from(multihash: Multihash) -> Self { multihash.to_bytes() @@ -252,10 +255,9 @@ impl parity_scale_codec::Decode for Multihash { } /// Writes the multihash to a byte stream. -#[cfg(feature = "std")] pub fn write_multihash(mut w: W, code: u64, size: u8, digest: &[u8]) -> Result<(), Error> where - W: std::io::Write, + W: io::Write, { use unsigned_varint::encode as varint_encode; @@ -277,16 +279,25 @@ where /// maximum/allocated size of the digest. /// /// Currently the maximum size for a digest is 255 bytes. -#[cfg(feature = "std")] pub fn read_multihash(mut r: R) -> Result<(u64, u8, GenericArray), Error> where - R: std::io::Read, + R: io::Read, S: Size, { - use unsigned_varint::io::read_u64; - - let code = read_u64(&mut r)?; - let size = read_u64(&mut r)?; + #[cfg(not(feature = "std"))] + use crate::varint_read_u64 as read_u64; + + #[cfg(feature = "std")] + use unsigned_varint::io::read_u64; + + let code = match read_u64(&mut r) { + Ok(c) => c, + Err(e) => return Err(e.into()), + }; + let size = match read_u64(&mut r) { + Ok(s) => s, + Err(e) => return Err(e.into()), + }; if size > S::to_u64() || size > u8::MAX as u64 { return Err(Error::InvalidSize(size)); From 5275973ae7ecb6ab93749a3e31f026e972174b94 Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Wed, 27 Oct 2021 11:49:55 -0400 Subject: [PATCH 05/14] Move read_u64 to multihash.rs --- src/lib.rs | 22 ---------------------- src/multihash.rs | 23 +++++++++++++++++++++-- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 047f9020..99b8fcbd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,25 +94,3 @@ pub use crate::hasher_impl::sha3::{Sha3Digest, Sha3_224, Sha3_256, Sha3_384, Sha pub use crate::hasher_impl::strobe::{Strobe256, Strobe512, StrobeDigest, StrobeHasher}; pub use crate::hasher_impl::unknown::UnknownDigest; -#[cfg(feature = "std")] -use std::io; -#[cfg(not(feature = "std"))] -use core2::io; - -use unsigned_varint::{encode, decode}; - -/// Reader function from unsigned_varint -pub fn varint_read_u64(mut r: R) -> Result { - let mut b = encode::u64_buffer(); - for i in 0..b.len() { - let n = r.read(&mut (b[i..i + 1]))?; - if n == 0 { - return Err(error::Error::Varint(decode::Error::Insufficient)); - } - else if decode::is_last(b[i]) { - return Ok(decode::u64(&b[..=i]).unwrap().0); - } - } - Err(error::Error::Varint(decode::Error::Overflow)) -} - diff --git a/src/multihash.rs b/src/multihash.rs index e8cd7b65..b8bebea5 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -8,6 +8,8 @@ use core::convert::TryInto; use core::fmt::Debug; use generic_array::{ArrayLength, GenericArray}; +use unsigned_varint::{encode as varint_encode, decode}; + #[cfg(feature = "std")] use std::io; @@ -259,7 +261,6 @@ pub fn write_multihash(mut w: W, code: u64, size: u8, digest: &[u8]) -> Resul where W: io::Write, { - use unsigned_varint::encode as varint_encode; let mut code_buf = varint_encode::u64_buffer(); let code = varint_encode::u64(code, &mut code_buf); @@ -285,7 +286,7 @@ where S: Size, { #[cfg(not(feature = "std"))] - use crate::varint_read_u64 as read_u64; + use crate::read_u64 as read_u64; #[cfg(feature = "std")] use unsigned_varint::io::read_u64; @@ -308,6 +309,24 @@ where Ok((code, size as u8, digest)) } +/// Reads 64 bits from a byte array into a u64 +/// Adapted from unsigned-varint's generated read_u64 function at +/// https://github.com/paritytech/unsigned-varint/blob/master/src/io.rs +pub fn read_u64(mut r: R) -> Result { + let mut b = varint_encode::u64_buffer(); + for i in 0..b.len() { + let n = r.read(&mut (b[i..i + 1]))?; + if n == 0 { + return Err(Error::Varint(decode::Error::Insufficient)); + } + else if decode::is_last(b[i]) { + return Ok(decode::u64(&b[..=i]).unwrap().0); + } + } + Err(Error::Varint(decode::Error::Overflow)) +} + + #[cfg(test)] mod tests { use super::*; From 93454eaf4d567940f9d9c31d58ab8cdefac448f1 Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Wed, 27 Oct 2021 11:53:35 -0400 Subject: [PATCH 06/14] Formatting --- src/error.rs | 16 +++++++-------- src/hasher.rs | 10 +++++----- src/lib.rs | 1 - src/multihash.rs | 51 +++++++++++++++++++++++------------------------- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/src/error.rs b/src/error.rs index dfb5ac77..137fb8f6 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,8 +1,8 @@ -#[cfg(feature = "std")] -use std::io::Error as IoError; #[cfg(not(feature = "std"))] use core2::io::Error as IoError; - +#[cfg(feature = "std")] +use std::io::Error as IoError; + use unsigned_varint::decode::Error as DecodeError; #[cfg(feature = "std")] use unsigned_varint::io::ReadError; @@ -36,14 +36,14 @@ impl core::fmt::Display for Error { impl std::error::Error for Error {} #[cfg(not(feature = "std"))] -impl core2::error::Error for Error {} +impl core2::error::Error for Error {} #[cfg(not(feature = "std"))] impl From for Error { - fn from(err: core2::io::Error) -> Self { - Self::Io(err) - } -} + fn from(err: core2::io::Error) -> Self { + Self::Io(err) + } +} #[cfg(feature = "std")] impl From for Error { diff --git a/src/hasher.rs b/src/hasher.rs index 4d90705e..224d44fd 100644 --- a/src/hasher.rs +++ b/src/hasher.rs @@ -58,11 +58,11 @@ pub trait Digest: where R: io::Read, { - #[cfg(not(feature = "std"))] - use crate::varint_read_u64 as read_u64; - - #[cfg(feature = "std")] - use unsigned_varint::io::read_u64; + #[cfg(not(feature = "std"))] + use crate::varint_read_u64 as read_u64; + + #[cfg(feature = "std")] + use unsigned_varint::io::read_u64; let size = read_u64(&mut r)?; if size > S::to_u64() || size > u8::max_value() as u64 { diff --git a/src/lib.rs b/src/lib.rs index 99b8fcbd..5c4cb365 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -93,4 +93,3 @@ pub use crate::hasher_impl::sha3::{Sha3Digest, Sha3_224, Sha3_256, Sha3_384, Sha #[cfg(feature = "strobe")] pub use crate::hasher_impl::strobe::{Strobe256, Strobe512, StrobeDigest, StrobeHasher}; pub use crate::hasher_impl::unknown::UnknownDigest; - diff --git a/src/multihash.rs b/src/multihash.rs index b8bebea5..d98fc7c1 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -8,7 +8,7 @@ use core::convert::TryInto; use core::fmt::Debug; use generic_array::{ArrayLength, GenericArray}; -use unsigned_varint::{encode as varint_encode, decode}; +use unsigned_varint::{decode, encode as varint_encode}; #[cfg(feature = "std")] use std::io; @@ -261,7 +261,6 @@ pub fn write_multihash(mut w: W, code: u64, size: u8, digest: &[u8]) -> Resul where W: io::Write, { - let mut code_buf = varint_encode::u64_buffer(); let code = varint_encode::u64(code, &mut code_buf); @@ -285,20 +284,20 @@ where R: io::Read, S: Size, { - #[cfg(not(feature = "std"))] - use crate::read_u64 as read_u64; - - #[cfg(feature = "std")] - use unsigned_varint::io::read_u64; - - let code = match read_u64(&mut r) { - Ok(c) => c, - Err(e) => return Err(e.into()), - }; - let size = match read_u64(&mut r) { - Ok(s) => s, - Err(e) => return Err(e.into()), - }; + #[cfg(not(feature = "std"))] + use crate::read_u64; + + #[cfg(feature = "std")] + use unsigned_varint::io::read_u64; + + let code = match read_u64(&mut r) { + Ok(c) => c, + Err(e) => return Err(e.into()), + }; + let size = match read_u64(&mut r) { + Ok(s) => s, + Err(e) => return Err(e.into()), + }; if size > S::to_u64() || size > u8::MAX as u64 { return Err(Error::InvalidSize(size)); @@ -313,20 +312,18 @@ where /// Adapted from unsigned-varint's generated read_u64 function at /// https://github.com/paritytech/unsigned-varint/blob/master/src/io.rs pub fn read_u64(mut r: R) -> Result { - let mut b = varint_encode::u64_buffer(); - for i in 0..b.len() { - let n = r.read(&mut (b[i..i + 1]))?; - if n == 0 { - return Err(Error::Varint(decode::Error::Insufficient)); - } - else if decode::is_last(b[i]) { - return Ok(decode::u64(&b[..=i]).unwrap().0); + let mut b = varint_encode::u64_buffer(); + for i in 0..b.len() { + let n = r.read(&mut (b[i..i + 1]))?; + if n == 0 { + return Err(Error::Varint(decode::Error::Insufficient)); + } else if decode::is_last(b[i]) { + return Ok(decode::u64(&b[..=i]).unwrap().0); + } } - } - Err(Error::Varint(decode::Error::Overflow)) + Err(Error::Varint(decode::Error::Overflow)) } - #[cfg(test)] mod tests { use super::*; From 46237281dbd4846717dcb895680f578e11edce86 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 27 Oct 2021 13:33:14 -0700 Subject: [PATCH 07/14] fix read_u64 import --- src/hasher.rs | 6 +----- src/hasher_impl.rs | 2 +- src/multihash.rs | 15 +++++++-------- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/hasher.rs b/src/hasher.rs index 224d44fd..ff01a1f8 100644 --- a/src/hasher.rs +++ b/src/hasher.rs @@ -58,11 +58,7 @@ pub trait Digest: where R: io::Read, { - #[cfg(not(feature = "std"))] - use crate::varint_read_u64 as read_u64; - - #[cfg(feature = "std")] - use unsigned_varint::io::read_u64; + use crate::multihash::read_u64; let size = read_u64(&mut r)?; if size > S::to_u64() || size > u8::max_value() as u64 { diff --git a/src/hasher_impl.rs b/src/hasher_impl.rs index aeed0bfc..ba9b54b1 100644 --- a/src/hasher_impl.rs +++ b/src/hasher_impl.rs @@ -330,7 +330,7 @@ pub mod identity { where R: std::io::Read, { - use unsigned_varint::io::read_u64; + use crate::multihash::read_u64; let size = read_u64(&mut r)?; if size > S::to_u64() || size > u8::max_value() as u64 { diff --git a/src/multihash.rs b/src/multihash.rs index d98fc7c1..9d605536 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -8,7 +8,7 @@ use core::convert::TryInto; use core::fmt::Debug; use generic_array::{ArrayLength, GenericArray}; -use unsigned_varint::{decode, encode as varint_encode}; +use unsigned_varint::encode as varint_encode; #[cfg(feature = "std")] use std::io; @@ -284,12 +284,6 @@ where R: io::Read, S: Size, { - #[cfg(not(feature = "std"))] - use crate::read_u64; - - #[cfg(feature = "std")] - use unsigned_varint::io::read_u64; - let code = match read_u64(&mut r) { Ok(c) => c, Err(e) => return Err(e.into()), @@ -308,10 +302,15 @@ where Ok((code, size as u8, digest)) } +#[cfg(feature = "std")] +pub(crate) use unsigned_varint::io::read_u64; + /// Reads 64 bits from a byte array into a u64 /// Adapted from unsigned-varint's generated read_u64 function at /// https://github.com/paritytech/unsigned-varint/blob/master/src/io.rs -pub fn read_u64(mut r: R) -> Result { +#[cfg(not(feature = "std"))] +pub(crate) fn read_u64(mut r: R) -> Result { + use unsigned_varint::decode; let mut b = varint_encode::u64_buffer(); for i in 0..b.len() { let n = r.read(&mut (b[i..i + 1]))?; From 456276b68420cf628444491f2eec6e1bfc269b12 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 27 Oct 2021 14:23:20 -0700 Subject: [PATCH 08/14] simplify core2 imports We can avoid some duplicate code if we alias. --- src/error.rs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/error.rs b/src/error.rs index 137fb8f6..bb51c333 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,7 +1,7 @@ #[cfg(not(feature = "std"))] -use core2::io::Error as IoError; +use core2::{error::Error as StdError, io::Error as IoError}; #[cfg(feature = "std")] -use std::io::Error as IoError; +use std::{error::Error as StdError, io::Error as IoError}; use unsigned_varint::decode::Error as DecodeError; #[cfg(feature = "std")] @@ -32,20 +32,8 @@ impl core::fmt::Display for Error { } } -#[cfg(feature = "std")] -impl std::error::Error for Error {} - -#[cfg(not(feature = "std"))] -impl core2::error::Error for Error {} +impl StdError for Error {} -#[cfg(not(feature = "std"))] -impl From for Error { - fn from(err: core2::io::Error) -> Self { - Self::Io(err) - } -} - -#[cfg(feature = "std")] impl From for Error { fn from(err: IoError) -> Self { Self::Io(err) From cc3ed1faa0a2b63d553304436aa3277c91c26c98 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 27 Oct 2021 14:37:05 -0700 Subject: [PATCH 09/14] implement hasher using core2 --- src/hasher_impl.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/hasher_impl.rs b/src/hasher_impl.rs index ba9b54b1..182d932d 100644 --- a/src/hasher_impl.rs +++ b/src/hasher_impl.rs @@ -3,6 +3,12 @@ use crate::hasher::{Digest, Size, StatefulHasher}; use core::convert::TryFrom; use generic_array::GenericArray; +#[cfg(feature = "std")] +use std::io; + +#[cfg(not(feature = "std"))] +use core2::io; + macro_rules! derive_digest { ($name:ident) => { /// Multihash digest. @@ -52,14 +58,13 @@ macro_rules! derive_digest { macro_rules! derive_write { ($name:ident) => { - #[cfg(feature = "std")] - impl std::io::Write for $name { - fn write(&mut self, buf: &[u8]) -> std::io::Result { + impl io::Write for $name { + fn write(&mut self, buf: &[u8]) -> io::Result { self.update(buf); Ok(buf.len()) } - fn flush(&mut self) -> std::io::Result<()> { + fn flush(&mut self) -> io::Result<()> { Ok(()) } } @@ -222,14 +227,13 @@ macro_rules! derive_hasher_sha { } } - #[cfg(feature = "std")] - impl std::io::Write for $name { - fn write(&mut self, buf: &[u8]) -> std::io::Result { + impl io::Write for $name { + fn write(&mut self, buf: &[u8]) -> io::Result { self.update(buf); Ok(buf.len()) } - fn flush(&mut self) -> std::io::Result<()> { + fn flush(&mut self) -> io::Result<()> { Ok(()) } } @@ -325,10 +329,9 @@ pub mod identity { // A custom implementation is needed as an identity hash also stores the actual size of // the given digest. - #[cfg(feature = "std")] fn from_reader(mut r: R) -> Result where - R: std::io::Read, + R: io::Read, { use crate::multihash::read_u64; From 3fb4ae31c475dca9ce02e75188de764fb74a08c7 Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Thu, 28 Oct 2021 11:53:45 -0400 Subject: [PATCH 10/14] Resolve feedback --- src/error.rs | 1 - src/multihash.rs | 17 +++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/error.rs b/src/error.rs index bb51c333..df759e0e 100644 --- a/src/error.rs +++ b/src/error.rs @@ -23,7 +23,6 @@ pub enum Error { impl core::fmt::Display for Error { fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { match self { - //#[cfg(feature = "std")] Self::Io(err) => write!(f, "{}", err), Self::UnsupportedCode(code) => write!(f, "Unsupported multihash code {}.", code), Self::InvalidSize(size) => write!(f, "Invalid multihash size {}.", size), diff --git a/src/multihash.rs b/src/multihash.rs index 9d605536..14b9fd89 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -1,6 +1,6 @@ use crate::hasher::{Digest, Size}; use crate::Error; -#[cfg(not(feature = "std"))] +#[cfg(feature = "alloc")] use alloc::vec::Vec; use core::convert::TryFrom; @@ -160,9 +160,11 @@ impl Multihash { write_multihash(w, self.code(), self.size(), self.digest()) } + + #[cfg(any(feature = "std", feature = "alloc"))] /// Returns the bytes of a multihash. pub fn to_bytes(&self) -> Vec { - let mut bytes: Vec = Vec::with_capacity(self.size().into()); + let mut bytes = Vec::with_capacity(self.size().into()); self.write(&mut bytes) .expect("writing to a vec should never fail"); bytes @@ -178,6 +180,7 @@ impl core::hash::Hash for Multihash { } } +#[cfg(any(feature = "std", feature = "alloc"))] impl From> for Vec { fn from(multihash: Multihash) -> Self { multihash.to_bytes() @@ -284,14 +287,8 @@ where R: io::Read, S: Size, { - let code = match read_u64(&mut r) { - Ok(c) => c, - Err(e) => return Err(e.into()), - }; - let size = match read_u64(&mut r) { - Ok(s) => s, - Err(e) => return Err(e.into()), - }; + let code = read_u64(&mut r)?; + let size = read_u64(&mut r)?; if size > S::to_u64() || size > u8::MAX as u64 { return Err(Error::InvalidSize(size)); From 8dc13501c2c2a1eba3e3b0cea1b27b21bd470aba Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Thu, 28 Oct 2021 12:02:19 -0400 Subject: [PATCH 11/14] Add alloc feature --- Cargo.toml | 1 + src/lib.rs | 2 +- src/multihash.rs | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3b42d247..08fa86eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ resolver = "2" [features] default = ["std", "derive", "multihash-impl", "secure-hashes"] std = ["unsigned-varint/std", "multihash-derive/std"] +alloc = [] multihash-impl = ["derive"] derive = ["multihash-derive"] arb = ["quickcheck", "rand"] diff --git a/src/lib.rs b/src/lib.rs index 5c4cb365..89a50d81 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,7 +52,7 @@ #![deny(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(not(feature = "std"))] +#[cfg(all(not(feature = "std"), feature = "alloc"))] #[macro_use] extern crate alloc; diff --git a/src/multihash.rs b/src/multihash.rs index 14b9fd89..b71c7ef4 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -1,6 +1,6 @@ use crate::hasher::{Digest, Size}; use crate::Error; -#[cfg(feature = "alloc")] +#[cfg(all(not(feature = "std"), feature = "alloc"))] use alloc::vec::Vec; use core::convert::TryFrom; @@ -160,7 +160,6 @@ impl Multihash { write_multihash(w, self.code(), self.size(), self.digest()) } - #[cfg(any(feature = "std", feature = "alloc"))] /// Returns the bytes of a multihash. pub fn to_bytes(&self) -> Vec { From f918ffbfae6aab6ddc281a8410c784b93382c0cf Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Thu, 28 Oct 2021 13:44:16 -0400 Subject: [PATCH 12/14] Include alloc feature in std, run cargo fmt --- Cargo.toml | 2 +- src/lib.rs | 2 +- src/multihash.rs | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 08fa86eb..e3feba47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ resolver = "2" [features] default = ["std", "derive", "multihash-impl", "secure-hashes"] -std = ["unsigned-varint/std", "multihash-derive/std"] +std = ["unsigned-varint/std", "multihash-derive/std", "alloc"] alloc = [] multihash-impl = ["derive"] derive = ["multihash-derive"] diff --git a/src/lib.rs b/src/lib.rs index 89a50d81..de322734 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,7 +52,7 @@ #![deny(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(all(not(feature = "std"), feature = "alloc"))] +#[cfg(feature = "alloc")] #[macro_use] extern crate alloc; diff --git a/src/multihash.rs b/src/multihash.rs index b71c7ef4..34013c33 100644 --- a/src/multihash.rs +++ b/src/multihash.rs @@ -1,6 +1,6 @@ use crate::hasher::{Digest, Size}; use crate::Error; -#[cfg(all(not(feature = "std"), feature = "alloc"))] +#[cfg(feature = "alloc")] use alloc::vec::Vec; use core::convert::TryFrom; @@ -160,7 +160,7 @@ impl Multihash { write_multihash(w, self.code(), self.size(), self.digest()) } - #[cfg(any(feature = "std", feature = "alloc"))] + #[cfg(feature = "alloc")] /// Returns the bytes of a multihash. pub fn to_bytes(&self) -> Vec { let mut bytes = Vec::with_capacity(self.size().into()); @@ -179,7 +179,7 @@ impl core::hash::Hash for Multihash { } } -#[cfg(any(feature = "std", feature = "alloc"))] +#[cfg(feature = "alloc")] impl From> for Vec { fn from(multihash: Multihash) -> Self { multihash.to_bytes() @@ -286,8 +286,8 @@ where R: io::Read, S: Size, { - let code = read_u64(&mut r)?; - let size = read_u64(&mut r)?; + let code = read_u64(&mut r)?; + let size = read_u64(&mut r)?; if size > S::to_u64() || size > u8::MAX as u64 { return Err(Error::InvalidSize(size)); From 86777fb4bcd6b70a849d612fb5d2ad195a187197 Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Thu, 28 Oct 2021 15:45:40 -0400 Subject: [PATCH 13/14] Fix unused macro_use --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index de322734..580a528e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,9 +51,9 @@ #![deny(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] +#![cfg_attr(feature = "alloc", macro_use)] #[cfg(feature = "alloc")] -#[macro_use] extern crate alloc; #[cfg(any(test, feature = "arb"))] From 2e49ef6828c07a0dc5f39cdfb58118396fab65ed Mon Sep 17 00:00:00 2001 From: samuelburnham Date: Thu, 28 Oct 2021 17:24:20 -0400 Subject: [PATCH 14/14] Remove macro_use --- src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 580a528e..c0b79c71 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,7 +51,6 @@ #![deny(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)] -#![cfg_attr(feature = "alloc", macro_use)] #[cfg(feature = "alloc")] extern crate alloc;