From c6cdb67ec2a80f0a21b707ea3abd2e319a8fa324 Mon Sep 17 00:00:00 2001 From: vms Date: Fri, 4 Feb 2022 23:21:25 +0300 Subject: [PATCH] add greeting and url-downloader services --- .gitignore | 10 + hello_world/Cargo.lock | 1654 +++++++++++++++++++ hello_world/Cargo.toml | 18 + hello_world/Config.toml | 6 + hello_world/artifacts/greeting.wasm | Bin 0 -> 69629 bytes hello_world/build.sh | 9 + hello_world/src/main.rs | 44 + url-downloader/Config.toml | 21 + url-downloader/artifacts/curl_adapter.wasm | Bin 0 -> 95158 bytes url-downloader/artifacts/facade.wasm | Bin 0 -> 90468 bytes url-downloader/artifacts/local_storage.wasm | Bin 0 -> 108750 bytes url-downloader/build.sh | 26 + url-downloader/curl_adapter/Cargo.lock | 275 +++ url-downloader/curl_adapter/Cargo.toml | 14 + url-downloader/curl_adapter/src/main.rs | 46 + url-downloader/facade/Cargo.lock | 282 ++++ url-downloader/facade/Cargo.toml | 15 + url-downloader/facade/src/main.rs | 56 + url-downloader/local_storage/Cargo.lock | 351 ++++ url-downloader/local_storage/Cargo.toml | 16 + url-downloader/local_storage/src/main.rs | 54 + url-downloader/sites/asd | 6 + 22 files changed, 2903 insertions(+) create mode 100644 .gitignore create mode 100644 hello_world/Cargo.lock create mode 100644 hello_world/Cargo.toml create mode 100644 hello_world/Config.toml create mode 100755 hello_world/artifacts/greeting.wasm create mode 100755 hello_world/build.sh create mode 100644 hello_world/src/main.rs create mode 100644 url-downloader/Config.toml create mode 100755 url-downloader/artifacts/curl_adapter.wasm create mode 100755 url-downloader/artifacts/facade.wasm create mode 100755 url-downloader/artifacts/local_storage.wasm create mode 100755 url-downloader/build.sh create mode 100644 url-downloader/curl_adapter/Cargo.lock create mode 100644 url-downloader/curl_adapter/Cargo.toml create mode 100644 url-downloader/curl_adapter/src/main.rs create mode 100644 url-downloader/facade/Cargo.lock create mode 100644 url-downloader/facade/Cargo.toml create mode 100644 url-downloader/facade/src/main.rs create mode 100644 url-downloader/local_storage/Cargo.lock create mode 100644 url-downloader/local_storage/Cargo.toml create mode 100644 url-downloader/local_storage/src/main.rs create mode 100644 url-downloader/sites/asd diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..565208c --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +target/ +**/*.rs.bk +.idea + +# MacOS misc file +*.DS_Store + +# REPL history files +*.repl_history + diff --git a/hello_world/Cargo.lock b/hello_world/Cargo.lock new file mode 100644 index 0000000..b1aca41 --- /dev/null +++ b/hello_world/Cargo.lock @@ -0,0 +1,1654 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" + +[[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 = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake3" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 0.1.10", + "constant_time_eq", + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "boolinator" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cargo_toml" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "513d17226888c7b8283ac02a1c1b0d8a9d4cbf6db65dfadb79f598f5d7966fe9" +dependencies = [ + "serde", + "serde_derive", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "cmd_lib" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "475bd7aa7680b4ed8f6bb59745e882bcbaeb39326532bb79ffb1716480d9a274" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cranelift-bforest" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a9c21f8042b9857bda93f6c1910b9f9f24100187a3d3d52f214a34e3dc5818" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7853f77a6e4a33c67a69c40f5e1bb982bd2dc5c4a22e17e67b65bbccf9b33b2e" +dependencies = [ + "byteorder", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-entity", + "gimli", + "log", + "smallvec", + "target-lexicon", + "thiserror", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "084cd6d5fb0d1da28acd72c199471bfb09acc703ec8f3bf07b1699584272a3b9" +dependencies = [ + "cranelift-codegen-shared", + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "701b599783305a58c25027a4d73f2d6b599b2d8ef3f26677275f480b4d51e05d" + +[[package]] +name = "cranelift-entity" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88e792b28e1ebbc0187b72ba5ba880dad083abe9231a99d19604d10c9e73f38" + +[[package]] +name = "cranelift-native" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32daf082da21c0c05d93394ff4842c2ab7c4991b1f3186a1d952f8ac660edd0b" +dependencies = [ + "cranelift-codegen", + "raw-cpuid", + "target-lexicon", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +dependencies = [ + "cfg-if 1.0.0", + "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 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97242a70df9b89a65d0b6df3c4bf5b9ce03c5b7309019777fbde37e7537f8762" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcae03edb34f947e64acdb1c33ec169824e20657e9ecb61cef6c8c74dcb8120" +dependencies = [ + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.5", + "subtle", +] + +[[package]] +name = "ctor" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "darling" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f2c43f534ea4b0b049015d00269734195e6d3f0f6635cb692251aca6f9f8b3c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e91455b86830a1c21799d94524df0845183fa55bafd9aa137b01c7d1065fa36" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29b5acf0dea37a7f66f7b25d2c5e93fd46f8f6968b1a5d7a3e02e97768afc95a" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.5", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "erased-serde" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56047058e1ab118075ca22f9ecd737bcc961aa3566a3019cb71388afa280bd8a" +dependencies = [ + "serde", +] + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fluence-app-service" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c66660de99826038c5ec4ad0f5dccf10b1c8a15924aeaa5315ab49d718bfc9" +dependencies = [ + "fluence-faas", + "log", + "maplit", + "serde", + "serde_derive", + "serde_json", + "toml", + "wasmer-wasi-fl", +] + +[[package]] +name = "fluence-faas" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abf1682505636b8c3436a2787df7bbae426d4f5277f5ae4ad193032b318b7f1" +dependencies = [ + "cmd_lib", + "itertools 0.9.0", + "log", + "marine-module-interface", + "marine-rs-sdk", + "marine-rs-sdk-main", + "marine-runtime", + "marine-utils", + "safe-transmute", + "serde", + "serde_derive", + "serde_json", + "thiserror", + "toml", + "wasmer-interface-types-fl", + "wasmer-runtime-core-fl", + "wasmer-runtime-fl", + "wasmer-wasi-fl", +] + +[[package]] +name = "fluence-it-types" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "047f670b4807cab8872550a607b1515daff08b3e3bb7576ce8f45971fd811a4e" +dependencies = [ + "it-to-bytes", + "nom", + "serde", + "variant_count", + "wast", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "generational-arena" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d3b771574f62d0548cee0ad9057857e9fc25d7a3335f140c84f6acd0bf601" +dependencies = [ + "cfg-if 0.1.10", + "serde", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "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 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", +] + +[[package]] +name = "ghost" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5bcf1bbeab73aa4cf2fde60a846858dc036163c7c33bec309f8d17de785479" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gimli" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dd6190aad0f05ddbbf3245c54ed14ca4aa6dd32f22312b70d8f168c3e3e633" +dependencies = [ + "byteorder", + "indexmap", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[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 = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +dependencies = [ + "autocfg", + "hashbrown", + "serde", +] + +[[package]] +name = "inventory" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6b5d8c669bfbad811d95ddd7a1c6cf9cfdbf2777e59928b6f3fa8ff54f72a0" +dependencies = [ + "ctor", + "ghost", +] + +[[package]] +name = "it-lilo" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ccf40e1e08f6f47ffbafe3cfb2e3adb721ddde80b178240f038d07dc9652fb" +dependencies = [ + "fluence-it-types", + "log", + "paste", + "thiserror", +] + +[[package]] +name = "it-to-bytes" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729c74bb4236418898a219c6d96f14cba77456dd7c04a2e99e65e9c643709b56" + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "lexical-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" +dependencies = [ + "arrayvec", + "bitflags", + "cfg-if 1.0.0", + "ryu", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" + +[[package]] +name = "lock_api" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + +[[package]] +name = "marine-build-rs-generator" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0108407ef0528984cd5b226e6d69552b1658b205f60c83305ca33179d6e9eee1" +dependencies = [ + "marine-test-macro-impl", +] + +[[package]] +name = "marine-it-generator" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "890b228b9151e9dff213501986f564445a2f9ca5a706088b5d900f5ecf67f7e7" +dependencies = [ + "cargo_toml", + "it-lilo", + "marine-it-parser", + "marine-macro-impl", + "once_cell", + "serde", + "serde_json", + "thiserror", + "walrus", + "wasmer-interface-types-fl", +] + +[[package]] +name = "marine-it-interfaces" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e229143e72ba20e754de4766ff0d02e0cf176001f7471593f82b16c72dc26d" +dependencies = [ + "multimap", + "wasmer-interface-types-fl", +] + +[[package]] +name = "marine-it-parser" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd97bd85072fc540763769be153a7c8ee83391e668b37ef96d6c48decec2cd5" +dependencies = [ + "anyhow", + "itertools 0.10.3", + "marine-it-interfaces", + "marine-module-interface", + "nom", + "semver 0.11.0", + "serde", + "thiserror", + "walrus", + "wasmer-interface-types-fl", + "wasmer-runtime-core-fl", +] + +[[package]] +name = "marine-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc907943772cf966ebe2a2d462d09bc79e898ef102ed065ba3d3abcc93fbb71" +dependencies = [ + "marine-macro-impl", + "marine-rs-sdk-main", +] + +[[package]] +name = "marine-macro-impl" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdbed3a10ae9b22df06bee8cd0023255358935aae8e8daf9d1a006cfaeeb11e" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "uuid", +] + +[[package]] +name = "marine-module-info-parser" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec8f4ab2eeeb5c1d66d9b56fe6b0b5bf39820aa8cc2f1d7be42bdf95654d529" +dependencies = [ + "anyhow", + "chrono", + "marine-rs-sdk-main", + "semver 0.11.0", + "serde", + "thiserror", + "walrus", + "wasmer-runtime-core-fl", +] + +[[package]] +name = "marine-module-interface" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06bc36ef268bf7436916f1fa9b0c84104692a717ea5eef3c90b9f25c3407f6b7" +dependencies = [ + "anyhow", + "itertools 0.10.3", + "marine-it-interfaces", + "nom", + "semver 0.11.0", + "serde", + "thiserror", + "walrus", + "wasmer-interface-types-fl", + "wasmer-runtime-core-fl", +] + +[[package]] +name = "marine-rs-sdk" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d17d44016675abdf18caf3ac1bdd4437cc17ec0db019da141bb06a9ea991726" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "marine-timestamp-macro", + "polyplets", + "serde", +] + +[[package]] +name = "marine-rs-sdk-main" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff262801664ce22f9d274504d6e8088c217034aba0ca431eca8d0258f3699c6" +dependencies = [ + "log", + "serde", +] + +[[package]] +name = "marine-rs-sdk-test" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e286a347527936cf97456b928bd6271e0d39fc1c6b78e99461f00e6d74f018" +dependencies = [ + "fluence-app-service", + "marine-build-rs-generator", + "marine-test-macro", + "serde", + "serde_json", + "uuid", +] + +[[package]] +name = "marine-runtime" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "983262d394c59d4321b141e303eb55015bc412f319d54bbad7f253e4583253b2" +dependencies = [ + "anyhow", + "boolinator", + "it-lilo", + "log", + "marine-it-generator", + "marine-it-interfaces", + "marine-it-parser", + "marine-module-info-parser", + "marine-module-interface", + "marine-utils", + "multimap", + "once_cell", + "parity-wasm", + "paste", + "pwasm-utils", + "semver 0.11.0", + "serde", + "thiserror", + "wasmer-interface-types-fl", + "wasmer-runtime-core-fl", + "wasmer-runtime-fl", + "wasmer-wasi-fl", +] + +[[package]] +name = "marine-test-macro" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d0463358f6c2459089ef8f130983dc911fd0c2aa4cb7c6b59de206f4a816e" +dependencies = [ + "marine-test-macro-impl", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "marine-test-macro-impl" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8f4f1ae0ba20e9241e8882e6eb1b2302daa479d67eee5badb54b1520e17c0cb" +dependencies = [ + "darling", + "fluence-app-service", + "itertools 0.10.3", + "marine-it-parser", + "proc-macro-error", + "proc-macro2", + "quote", + "static_assertions", + "syn", + "thiserror", +] + +[[package]] +name = "marine-timestamp-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a9f5b1adeff98ac5a14cfc5fa814185a807ba4a0d3849c9f9e9fd868b27d1f" +dependencies = [ + "chrono", + "quote", +] + +[[package]] +name = "marine-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dc5838acba84ce4d802d672afd0814fae0ae7098021ae5b06d975e70d09f812" + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "nix" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "lexical-core", + "memchr", + "version_check", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "once_cell" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" + +[[package]] +name = "page_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebde548fbbf1ea81a99b128872779c437752fb99f217c45245e1a61dcd9edcd" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "parity-wasm" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865" + +[[package]] +name = "parking_lot" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "paste" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "polyplets" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc56e7803860fa903c27675a17215e1cfb39fb26e111c0b93f6c049f9cf8d8e" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "serde", +] + +[[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", + "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.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "pwasm-utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7a12f176deee919f4ba55326ee17491c8b707d0987aed822682c821b660192" +dependencies = [ + "byteorder", + "log", + "parity-wasm", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "raw-cpuid" +version = "7.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "beb71f708fe39b2c5e98076204c3cc094ee5a4c12c4cdb119a2b72dc34164f41" +dependencies = [ + "bitflags", + "cc", + "rustc_version", +] + +[[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 = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "safe-transmute" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a01dab6acf992653be49205bdd549f32f17cb2803e8eacf1560bf97259aae8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.2", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-bench" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d733da87e79faaac25616e33d26299a41143fd4cd42746cbb0e91d8feea243fd" +dependencies = [ + "byteorder", + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "smallvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[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.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "target-lexicon" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d" + +[[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 = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[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.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "typetag" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4080564c5b2241b5bff53ab610082234e0c57b0417f4bd10596f183001505b8a" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e60147782cc30833c05fba3bab1d9b5771b2685a2557672ac96fa5d154099c0e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicode-segmentation" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.4", +] + +[[package]] +name = "variant_count" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "walrus" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d470d0583e65f4cab21a1ff3c1ba3dd23ae49e68f516f0afceaeb001b32af39" +dependencies = [ + "anyhow", + "id-arena", + "leb128", + "log", + "walrus-macro", + "wasmparser 0.59.0", +] + +[[package]] +name = "walrus-macro" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c2bb690b44cb1b0fdcc54d4998d21f8bdaf706b93775425e440b174f39ad16" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasm-greeting" +version = "0.1.0" +dependencies = [ + "marine-rs-sdk", + "marine-rs-sdk-test", +] + +[[package]] +name = "wasmer-clif-backend-fl" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "532fb6cef712d9cd1ec68f9fc561447df33313393926f9bdb91fc3d67eed918f" +dependencies = [ + "byteorder", + "cranelift-codegen", + "cranelift-entity", + "cranelift-native", + "libc", + "nix", + "rayon", + "serde", + "serde-bench", + "serde_bytes", + "serde_derive", + "target-lexicon", + "wasmer-clif-fork-frontend", + "wasmer-clif-fork-wasm", + "wasmer-runtime-core-fl", + "wasmer-win-exception-handler", + "wasmparser 0.51.4", + "winapi", +] + +[[package]] +name = "wasmer-clif-fork-frontend" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c23f2824f354a00a77e4b040eef6e1d4c595a8a3e9013bad65199cc8dade9a5a" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "wasmer-clif-fork-wasm" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a35e21d3aebc51cc6ebc0e830cf8458a9891c3482fb3c65ad18d408102929ae5" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "log", + "thiserror", + "wasmer-clif-fork-frontend", + "wasmparser 0.51.4", +] + +[[package]] +name = "wasmer-interface-types-fl" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14ba3b5a07989987994b96bf5cc7ac2947005f9ff6123d71b7064232f07d28fa" +dependencies = [ + "fluence-it-types", + "it-lilo", + "it-to-bytes", + "itertools 0.10.3", + "log", + "nom", + "safe-transmute", + "semver 0.11.0", + "serde", + "serde_json", + "thiserror", + "wast", +] + +[[package]] +name = "wasmer-runtime-core" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740161245998752cf1a567e860fd6355df0336fedca6be1940ec7aaa59643220" +dependencies = [ + "bincode", + "blake3", + "cc", + "digest 0.8.1", + "errno", + "hex", + "indexmap", + "lazy_static", + "libc", + "nix", + "page_size", + "parking_lot", + "rustc_version", + "serde", + "serde-bench", + "serde_bytes", + "serde_derive", + "smallvec", + "target-lexicon", + "wasmparser 0.51.4", + "winapi", +] + +[[package]] +name = "wasmer-runtime-core-fl" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d5ac3e0603e5f0ffaf11cbd854eea7c3b609ab4b676f71968f2bc47f9e3c4a" +dependencies = [ + "bincode", + "blake3", + "cc", + "digest 0.8.1", + "errno", + "hex", + "indexmap", + "lazy_static", + "libc", + "nix", + "page_size", + "parking_lot", + "rustc_version", + "serde", + "serde-bench", + "serde_bytes", + "serde_derive", + "smallvec", + "target-lexicon", + "wasmparser 0.51.4", + "winapi", +] + +[[package]] +name = "wasmer-runtime-fl" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5688460204d9f644d846300d041632cf34c4b4f83a955c0a67e600030376d2ee" +dependencies = [ + "lazy_static", + "memmap", + "serde", + "serde_derive", + "wasmer-clif-backend-fl", + "wasmer-runtime-core-fl", +] + +[[package]] +name = "wasmer-wasi-fl" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0f331ec6fb16590946f61b2418cd5295c4f3aa772c77eb054bea250a8fdb71" +dependencies = [ + "bincode", + "byteorder", + "generational-arena", + "getrandom 0.1.16", + "libc", + "log", + "serde", + "thiserror", + "time", + "typetag", + "wasmer-runtime-core-fl", + "winapi", +] + +[[package]] +name = "wasmer-win-exception-handler" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd39f3b2bd7964b28ea6f944a7eaa445cfbc91c4f2695d188103f2689bb37d9" +dependencies = [ + "cc", + "libc", + "wasmer-runtime-core", + "winapi", +] + +[[package]] +name = "wasmparser" +version = "0.51.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" + +[[package]] +name = "wasmparser" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9" + +[[package]] +name = "wast" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9df3d716118a503b2f6bbb6ff46b21997ab0cc167b01de7a188e45e4b01e8d" +dependencies = [ + "leb128", +] + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/hello_world/Cargo.toml b/hello_world/Cargo.toml new file mode 100644 index 0000000..2a47fee --- /dev/null +++ b/hello_world/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "wasm-greeting" +version = "0.1.0" +authors = ["Fluence Labs"] +description = "The greeting module for the Fluence network" +repository = "https://github.com/fluencelabs/marine/tree/master/examples/greeting" +edition = "2018" +publish = false + +[[bin]] +name = "greeting" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = "0.6.13" + +[dev-dependencies] +marine-rs-sdk-test = "0.4.1" diff --git a/hello_world/Config.toml b/hello_world/Config.toml new file mode 100644 index 0000000..5a5ad06 --- /dev/null +++ b/hello_world/Config.toml @@ -0,0 +1,6 @@ +modules_dir = "artifacts/" + +[[module]] + name = "greeting" + max_heap_size = "10 KiB" + logger_enabled = false diff --git a/hello_world/artifacts/greeting.wasm b/hello_world/artifacts/greeting.wasm new file mode 100755 index 0000000000000000000000000000000000000000..e5703c5dc9288eece13503d30f78e66f22ebb1e3 GIT binary patch literal 69629 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 literal 0 HcmV?d00001 diff --git a/hello_world/build.sh b/hello_world/build.sh new file mode 100755 index 0000000..81b8c0e --- /dev/null +++ b/hello_world/build.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +cargo update --aggressive +marine build --release + +rm artifacts/* || true +mkdir -p artifacts + +cp ./target/wasm32-wasi/release/greeting.wasm artifacts/ diff --git a/hello_world/src/main.rs b/hello_world/src/main.rs new file mode 100644 index 0000000..3c541d4 --- /dev/null +++ b/hello_world/src/main.rs @@ -0,0 +1,44 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use marine_rs_sdk::marine; +use marine_rs_sdk::module_manifest; + +module_manifest!(); + +pub fn main() {} + +#[marine] +pub fn greeting(name: String) -> String { + format!("Hi, {}", name) +} + +#[cfg(test)] +mod tests { + use marine_rs_sdk_test::marine_test; + + #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")] + fn empty_string(greeting: marine_test_env::greeting::ModuleInterface) { + let actual = greeting.greeting(String::new()); + assert_eq!(actual, "Hi, "); + } + + #[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")] + fn non_empty_string(greeting: marine_test_env::greeting::ModuleInterface) { + let actual = greeting.greeting("name".to_string()); + assert_eq!(actual, "Hi, name"); + } +} diff --git a/url-downloader/Config.toml b/url-downloader/Config.toml new file mode 100644 index 0000000..d22508b --- /dev/null +++ b/url-downloader/Config.toml @@ -0,0 +1,21 @@ +modules_dir = "artifacts/" + +[[module]] + name = "local_storage" + logger_enabled = true + + [module.wasi] + preopened_files = ["./sites"] + # this is where files will be stored + mapped_dirs = { "sites" = "./sites" } + +[[module]] + name = "curl_adapter" + logger_enabled = true + + [module.mounted_binaries] + curl = "/usr/bin/curl" + +[[module]] + name = "facade" + logger_enabled = true diff --git a/url-downloader/artifacts/curl_adapter.wasm b/url-downloader/artifacts/curl_adapter.wasm new file mode 100755 index 0000000000000000000000000000000000000000..eecdd4df3c0e0830e5ec5fe9d2d527a60f41c25d GIT binary patch literal 95158 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 Gmi`YZZJh%E literal 0 HcmV?d00001 diff --git a/url-downloader/artifacts/facade.wasm b/url-downloader/artifacts/facade.wasm new file mode 100755 index 0000000000000000000000000000000000000000..f6877115a5a4f2aa89a2702b05456075e1c669fe GIT binary patch literal 90468 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

XJ&NHAjJmki6!)4d;C1n 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 literal 0 HcmV?d00001 diff --git a/url-downloader/build.sh b/url-downloader/build.sh new file mode 100755 index 0000000..a81a671 --- /dev/null +++ b/url-downloader/build.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +( + cd local_storage || exit; + cargo update --aggressive; + marine build --release; +) + +( + cd curl_adapter || exit; + cargo update --aggressive; + marine build --release; +) + +( + cd facade || exit; + cargo update --aggressive; + marine build --release; +) + +rm -f artifacts/* || true +mkdir -p artifacts + +cp ./local_storage/target/wasm32-wasi/release/local_storage.wasm artifacts/ +cp ./curl_adapter/target/wasm32-wasi/release/curl_adapter.wasm artifacts/ +cp ./facade/target/wasm32-wasi/release/facade.wasm artifacts/ diff --git a/url-downloader/curl_adapter/Cargo.lock b/url-downloader/curl_adapter/Cargo.lock new file mode 100644 index 0000000..8d21de8 --- /dev/null +++ b/url-downloader/curl_adapter/Cargo.lock @@ -0,0 +1,275 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "curl_adapter" +version = "0.1.0" +dependencies = [ + "log", + "marine-rs-sdk", +] + +[[package]] +name = "getrandom" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "libc" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "marine-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc907943772cf966ebe2a2d462d09bc79e898ef102ed065ba3d3abcc93fbb71" +dependencies = [ + "marine-macro-impl", + "marine-rs-sdk-main", +] + +[[package]] +name = "marine-macro-impl" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdbed3a10ae9b22df06bee8cd0023255358935aae8e8daf9d1a006cfaeeb11e" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "uuid", +] + +[[package]] +name = "marine-rs-sdk" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d17d44016675abdf18caf3ac1bdd4437cc17ec0db019da141bb06a9ea991726" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "marine-timestamp-macro", + "polyplets", + "serde", +] + +[[package]] +name = "marine-rs-sdk-main" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff262801664ce22f9d274504d6e8088c217034aba0ca431eca8d0258f3699c6" +dependencies = [ + "log", + "serde", +] + +[[package]] +name = "marine-timestamp-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a9f5b1adeff98ac5a14cfc5fa814185a807ba4a0d3849c9f9e9fd868b27d1f" +dependencies = [ + "chrono", + "quote", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "polyplets" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc56e7803860fa903c27675a17215e1cfb39fb26e111c0b93f6c049f9cf8d8e" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "serde", +] + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/url-downloader/curl_adapter/Cargo.toml b/url-downloader/curl_adapter/Cargo.toml new file mode 100644 index 0000000..88a30e3 --- /dev/null +++ b/url-downloader/curl_adapter/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "curl_adapter" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2018" +publish = false + +[[bin]] +path = "src/main.rs" +name = "curl_adapter" + +[dependencies] +marine-rs-sdk ={ version = "0.6.13", features = ["logger"] } +log = "0.4.8" diff --git a/url-downloader/curl_adapter/src/main.rs b/url-downloader/curl_adapter/src/main.rs new file mode 100644 index 0000000..8326690 --- /dev/null +++ b/url-downloader/curl_adapter/src/main.rs @@ -0,0 +1,46 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#![allow(improper_ctypes)] + +use marine_rs_sdk::marine; +use marine_rs_sdk::module_manifest; + +use marine_rs_sdk::WasmLoggerBuilder; +use marine_rs_sdk::MountedBinaryResult; + +module_manifest!(); + +/// Log level can be changed by `RUST_LOG` env as well. +pub fn main() { + WasmLoggerBuilder::new().build().unwrap(); +} + +#[marine] +pub fn download(url: String) -> String { + log::info!("download called with url {}\n", url); + + let result = curl(vec![url]); + + String::from_utf8(result.stdout).unwrap() +} + +/// Permissions in `Config.toml` should exist to use host functions. +#[marine] +#[link(wasm_import_module = "host")] +extern "C" { + fn curl(cmd: Vec) -> MountedBinaryResult; +} diff --git a/url-downloader/facade/Cargo.lock b/url-downloader/facade/Cargo.lock new file mode 100644 index 0000000..0b9cafd --- /dev/null +++ b/url-downloader/facade/Cargo.lock @@ -0,0 +1,282 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "facade" +version = "0.1.0" +dependencies = [ + "anyhow", + "log", + "marine-rs-sdk", +] + +[[package]] +name = "getrandom" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[package]] +name = "libc" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "marine-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc907943772cf966ebe2a2d462d09bc79e898ef102ed065ba3d3abcc93fbb71" +dependencies = [ + "marine-macro-impl", + "marine-rs-sdk-main", +] + +[[package]] +name = "marine-macro-impl" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdbed3a10ae9b22df06bee8cd0023255358935aae8e8daf9d1a006cfaeeb11e" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "uuid", +] + +[[package]] +name = "marine-rs-sdk" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d17d44016675abdf18caf3ac1bdd4437cc17ec0db019da141bb06a9ea991726" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "marine-timestamp-macro", + "polyplets", + "serde", +] + +[[package]] +name = "marine-rs-sdk-main" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff262801664ce22f9d274504d6e8088c217034aba0ca431eca8d0258f3699c6" +dependencies = [ + "log", + "serde", +] + +[[package]] +name = "marine-timestamp-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a9f5b1adeff98ac5a14cfc5fa814185a807ba4a0d3849c9f9e9fd868b27d1f" +dependencies = [ + "chrono", + "quote", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "polyplets" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc56e7803860fa903c27675a17215e1cfb39fb26e111c0b93f6c049f9cf8d8e" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "serde", +] + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/url-downloader/facade/Cargo.toml b/url-downloader/facade/Cargo.toml new file mode 100644 index 0000000..62e3a4e --- /dev/null +++ b/url-downloader/facade/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "facade" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2018" +publish = false + +[[bin]] +name = "facade" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk ={ version = "0.6.13", features = ["logger"] } +anyhow = "1.0.31" +log = "0.4.8" diff --git a/url-downloader/facade/src/main.rs b/url-downloader/facade/src/main.rs new file mode 100644 index 0000000..848b3ec --- /dev/null +++ b/url-downloader/facade/src/main.rs @@ -0,0 +1,56 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#![allow(improper_ctypes)] + +use marine_rs_sdk::marine; +use marine_rs_sdk::module_manifest; +use marine_rs_sdk::WasmLoggerBuilder; + +module_manifest!(); + +pub fn main() { + WasmLoggerBuilder::new().build().unwrap(); +} + +/// Combining of modules: `curl` and `local_storage`. +/// Calls `curl` and stores returned result into a file. +#[marine] +pub fn get_n_save(url: String, file_name: String) -> String { + log::info!("get_n_save called with {} {}\n", url, file_name); + + let result = download(url); + file_put(file_name, result.into_bytes()); + + String::from("Ok") +} + +/// Importing `curl` module +#[marine] +#[link(wasm_import_module = "curl_adapter")] +extern "C" { + pub fn download(url: String) -> String; +} + +/// Importing `local_storage` module +#[marine] +#[link(wasm_import_module = "local_storage")] +extern "C" { + #[link_name = "get"] + pub fn file_get(file_name: String) -> Vec; + + #[link_name = "put"] + pub fn file_put(name: String, file_content: Vec) -> String; +} diff --git a/url-downloader/local_storage/Cargo.lock b/url-downloader/local_storage/Cargo.lock new file mode 100644 index 0000000..f60dce6 --- /dev/null +++ b/url-downloader/local_storage/Cargo.lock @@ -0,0 +1,351 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "bumpalo" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "time", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "itoa" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" + +[[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.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" + +[[package]] +name = "local_storage" +version = "0.1.0" +dependencies = [ + "log", + "marine-rs-sdk", + "wasm-tracing-allocator", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "marine-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc907943772cf966ebe2a2d462d09bc79e898ef102ed065ba3d3abcc93fbb71" +dependencies = [ + "marine-macro-impl", + "marine-rs-sdk-main", +] + +[[package]] +name = "marine-macro-impl" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdbed3a10ae9b22df06bee8cd0023255358935aae8e8daf9d1a006cfaeeb11e" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", + "uuid", +] + +[[package]] +name = "marine-rs-sdk" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d17d44016675abdf18caf3ac1bdd4437cc17ec0db019da141bb06a9ea991726" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "marine-timestamp-macro", + "polyplets", + "serde", +] + +[[package]] +name = "marine-rs-sdk-main" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ff262801664ce22f9d274504d6e8088c217034aba0ca431eca8d0258f3699c6" +dependencies = [ + "log", + "serde", +] + +[[package]] +name = "marine-timestamp-macro" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a9f5b1adeff98ac5a14cfc5fa814185a807ba4a0d3849c9f9e9fd868b27d1f" +dependencies = [ + "chrono", + "quote", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "polyplets" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cc56e7803860fa903c27675a17215e1cfb39fb26e111c0b93f6c049f9cf8d8e" +dependencies = [ + "marine-macro", + "marine-rs-sdk-main", + "serde", +] + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" + +[[package]] +name = "serde" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.136" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "syn" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi", + "winapi", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasm-bindgen" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" + +[[package]] +name = "wasm-tracing-allocator" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00638b0f463575ce0ad7fe03809c9b86b2a3abbb6c1f2e4d5569572b74ca65ae" +dependencies = [ + "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-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/url-downloader/local_storage/Cargo.toml b/url-downloader/local_storage/Cargo.toml new file mode 100644 index 0000000..a4f6293 --- /dev/null +++ b/url-downloader/local_storage/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "local_storage" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2018" +publish = false + +[[bin]] +name = "local_storage" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk ={ version = "0.6.13", features = ["logger"] } +wasm-tracing-allocator = "0.1.0" + +log = "0.4.8" diff --git a/url-downloader/local_storage/src/main.rs b/url-downloader/local_storage/src/main.rs new file mode 100644 index 0000000..34fba98 --- /dev/null +++ b/url-downloader/local_storage/src/main.rs @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use marine_rs_sdk::marine; +use marine_rs_sdk::module_manifest; +use marine_rs_sdk::WasmLoggerBuilder; + +use std::fs; +use std::path::PathBuf; + +module_manifest!(); + +const SITES_DIR: &str = "/sites/"; + +/// Log level can be changed by `RUST_LOG` env as well. +pub fn main() { + WasmLoggerBuilder::new().build().unwrap(); +} + +/// You can read or write files from the file system if there is permission to use directories described in `Config.toml`. +#[marine] +pub fn put(name: String, file_content: Vec) -> String { + log::info!("put called with file name {}\n", name); + let rpc_tmp_filepath = format!("{}{}", SITES_DIR, name); + + let result = fs::write(PathBuf::from(rpc_tmp_filepath), file_content); + if let Err(e) = result { + return format!("file can't be written: {}", e); + } + + String::from("Ok") +} + +#[marine] +pub fn get(file_name: String) -> Vec { + log::info!("get called with file name: {}\n", file_name); + + let tmp_filepath = format!("{}{}", SITES_DIR, file_name); + + fs::read(tmp_filepath).unwrap_or_else(|_| b"error while reading file".to_vec()) +} diff --git a/url-downloader/sites/asd b/url-downloader/sites/asd new file mode 100644 index 0000000..6c68f27 --- /dev/null +++ b/url-downloader/sites/asd @@ -0,0 +1,6 @@ + +301 Moved +

301 Moved

+The document has moved +here. +