diff --git a/aqua/ipfs-api.aqua b/aqua/ipfs-api.aqua index ef03f7f..03bff9e 100644 --- a/aqua/ipfs-api.aqua +++ b/aqua/ipfs-api.aqua @@ -6,7 +6,7 @@ alias PeerId: string alias CID: string alias Path: string --- Download file from remote IPFS node to Fluence node and then +-- Download file from remote IPFS node to Fluence node and then -- put that file to local IPFS node, effectively caching it on the local IPFS node. -- -- Arguments: @@ -19,7 +19,7 @@ alias Path: string -- Path on the node's local filesystem. It will be available only during single particle execution. -- -- Errors: --- If Ipfs.get_from or Ipfs.put fails, nil is returned. +-- If Ipfs.get_from or Ipfs.put fails, nil is returned. -- Errors are reported to the `error` callback. func get_and_cache( node: PeerId, @@ -49,14 +49,17 @@ func get_and_cache( -- path should exist & be available to `aqua-ipfs` func put(node: PeerId, path: string) -> IpfsPutResult: on node: - result <- Ipfs.put(path) - <- result + <- Ipfs.put(path) -- Download file `cid` from IPFS node `from` and save it to `node` func get_from(node: PeerId, cid: CID, from: Multiaddr) -> IpfsGetResult: on node: - result <- Ipfs.get_from(cid, from) - <- result + <- Ipfs.get_from(cid, from) + +-- Return contents of the file `cid` from IPFS node `from` +func cat_from(node: PeerId, cid: CID, from: Multiaddr) -> IpfsCatResult: + on node: + <- Ipfs.cat_from(cid, from) -- Set timeout for IPFS calls in `aqua-ipfs` func set_timeout(node: PeerId, timeout_sec: u64): @@ -66,17 +69,14 @@ func set_timeout(node: PeerId, timeout_sec: u64): -- Get externally available multiaddress of IPFS's HTTP RPC endpoint (usually on port 5001) func get_external_api_multiaddr(node: PeerId) -> IpfsMultiaddrResult: on node: - result <- Ipfs.get_external_api_multiaddr() - <- result + <- Ipfs.get_external_api_multiaddr() -- Get externally available multiaddress of IPFS's Swarm endpoint (usually on port 4001) func get_external_swarm_multiaddr(node: PeerId) -> IpfsMultiaddrResult: on node: - result <- Ipfs.get_external_swarm_multiaddr() - <- result + <- Ipfs.get_external_swarm_multiaddr() -- Get local multiaddress of IPFS's HTTP RPC endpoint (usually on port 5001) func get_local_api_multiaddr(node: PeerId) -> IpfsMultiaddrResult: on node: - result <- Ipfs.get_local_api_multiaddr() - <- result + <- Ipfs.get_local_api_multiaddr() diff --git a/aqua/ipfs.aqua b/aqua/ipfs.aqua index 3f6ec32..6c248ec 100644 --- a/aqua/ipfs.aqua +++ b/aqua/ipfs.aqua @@ -1,5 +1,10 @@ module Ipfs declares * +data IpfsCatResult: + success: bool + error: string + contents: string + data IpfsGetResult: success: bool error: string @@ -20,6 +25,8 @@ data IpfsResult: error: string service Ipfs("aqua-ipfs"): + cat(hash: string) -> IpfsCatResult + cat_from(hash: string, external_multiaddr: string) -> IpfsCatResult connect(multiaddr: string) -> IpfsResult get(hash: string) -> IpfsGetResult get_external_api_multiaddr() -> IpfsMultiaddrResult @@ -30,4 +37,4 @@ service Ipfs("aqua-ipfs"): set_external_api_multiaddr(multiaddr: string) -> IpfsResult set_external_swarm_multiaddr(multiaddr: string) -> IpfsResult set_local_api_multiaddr(multiaddr: string) -> IpfsResult - set_timeout(timeout_sec: u64) + set_timeout(timeout_sec: u64) diff --git a/service/Cargo.lock b/service/Cargo.lock index 6328455..fd964ea 100644 --- a/service/Cargo.lock +++ b/service/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "arrayref" @@ -85,9 +85,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" [[package]] name = "byteorder" @@ -106,9 +106,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.73" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" [[package]] name = "cfg-if" @@ -133,7 +133,7 @@ dependencies = [ "num-integer", "num-traits", "serde", - "time 0.1.44", + "time 0.1.45", "wasm-bindgen", "winapi", ] @@ -231,9 +231,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.5" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if 1.0.0", "crossbeam-epoch", @@ -252,26 +252,24 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.9" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", "memoffset", - "once_cell", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.10" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if 1.0.0", - "once_cell", ] [[package]] @@ -280,15 +278,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "subtle", ] [[package]] name = "ctor" -version = "0.1.22" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", "syn", @@ -296,9 +294,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.81" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97abf9f0eca9e52b7f81b945524e76710e6cb2366aead23b7d4fbf72e281f888" +checksum = "b61a7545f753a88bcbe0a70de1fcc0221e10bfc752f576754fa91e663db1622e" dependencies = [ "cc", "cxxbridge-flags", @@ -308,9 +306,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.81" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc32cc5fea1d894b77d269ddb9f192110069a8a9c1f1d441195fba90553dea3" +checksum = "f464457d494b5ed6905c63b0c4704842aba319084a0a3561cdc1359536b53200" dependencies = [ "cc", "codespan-reporting", @@ -323,15 +321,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.81" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca220e4794c934dc6b1207c3b42856ad4c302f2df1712e9f8d2eec5afaacf1f" +checksum = "43c7119ce3a3701ed81aca8410b9acf6fc399d2629d057b87e2efa4e63a3aaea" [[package]] name = "cxxbridge-macro" -version = "1.0.81" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b846f081361125bfc8dc9d3940c84e1fd83ba54bbca7b17cd29483c828be0704" +checksum = "65e07508b90551e610910fa648a1878991d367064997a596135b86df30daf07e" dependencies = [ "proc-macro2", "quote", @@ -375,9 +373,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "digest" @@ -394,20 +392,20 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", ] [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "erased-serde" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d013529d5574a60caeda29e179e695125448e5de52e3874f7b4c1d7360e18e" +checksum = "e4ca605381c017ec7a5fef5e548f1cfaa419ed0f6df6367339300db74c92aa7d" dependencies = [ "serde", ] @@ -445,9 +443,9 @@ dependencies = [ [[package]] name = "fluence-app-service" -version = "0.22.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01eec180e93188fa71a47432e298cc2725a7a247e3da6f51678443779d68dd02" +checksum = "967bc26939d9a5a0dd09bd8991c9b0df80eacb370723b8d1019184a9c0606936" dependencies = [ "log", "maplit", @@ -499,11 +497,10 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] @@ -528,9 +525,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -549,9 +546,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if 1.0.0", "libc", @@ -560,9 +557,9 @@ dependencies = [ [[package]] name = "ghost" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93490550b1782c589a350f2211fff2e34682e25fed17ef53fc4fa8fe184975e" +checksum = "41973d4c45f7a35af8753ba3457cc99d406d863941fd7f52663cff54a5ab99b3" dependencies = [ "proc-macro2", "quote", @@ -581,9 +578,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" @@ -596,9 +593,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] @@ -647,11 +644,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -664,9 +660,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown", @@ -689,6 +685,7 @@ version = "0.1.0" dependencies = [ "eyre", "fluence-fork-parity-multiaddr", + "itertools", "log", "marine-rs-sdk 0.6.15", "marine-rs-sdk-test", @@ -713,9 +710,9 @@ dependencies = [ [[package]] name = "it-json-serde" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7bc35c4e8bc44e236bc459a88a24a74326eedff6b073a435eb5537849bfd25" +checksum = "8d3f68d6c0e26f35c3d7f0176fcd14b2884c9e954ded51461a7a49f25a20b480" dependencies = [ "serde", "serde_derive", @@ -754,18 +751,18 @@ checksum = "729c74bb4236418898a219c6d96f14cba77456dd7c04a2e99e65e9c643709b56" [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "js-sys" @@ -803,15 +800,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.126" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "link-cplusplus" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] @@ -851,9 +848,9 @@ dependencies = [ [[package]] name = "marine-core" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b68e6db433b04a70ebfa7d4f65797863d45d3af0bbbb2865e39ab3de92803c2a" +checksum = "16160d8f2db5186ed94b09e6419096c595ad712346f9f384bd6936e0856b366a" dependencies = [ "anyhow", "boolinator", @@ -873,7 +870,7 @@ dependencies = [ "parity-wasm 0.45.0", "paste", "pwasm-utils", - "semver 1.0.14", + "semver 1.0.16", "serde", "thiserror", "wasmer-interface-types-fl", @@ -884,9 +881,9 @@ dependencies = [ [[package]] name = "marine-it-generator" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2cbca852ae9b00f95e48afcf9135ea3cc54b7364dff7adaf5dc57e4dab6668" +checksum = "7cd47a34f51b0767bb28b3aea97d0a89716952ebe11bcf151e09a7d7c2e5eb12" dependencies = [ "it-lilo", "marine-it-parser", @@ -911,16 +908,16 @@ dependencies = [ [[package]] name = "marine-it-parser" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e52c1e59b84546be07004851c242a5644487211b62c242c69ceff57f9112aa0" +checksum = "b5e9902762a0575a992c8d6bea77d1a34f485b89ce1db438f28d9babd2ac72f3" dependencies = [ "anyhow", "itertools", "marine-it-interfaces", "marine-module-interface", "nom", - "semver 1.0.14", + "semver 1.0.16", "serde", "thiserror", "walrus", @@ -977,24 +974,24 @@ dependencies = [ [[package]] name = "marine-min-it-version" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af8d201133f1ca6af9d9bc68a2fe03e16e7c5672456e1aa2c7785976f544265d" +checksum = "d23211d31dc45b0941666e867e717c951d3f446c27ddbf148b4fa62c4de1f159" dependencies = [ "once_cell", - "semver 1.0.14", + "semver 1.0.16", ] [[package]] name = "marine-module-info-parser" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923184474998c2deadf603f95cd1d3a215f98428c90c0daff4ba98aa2de888f8" +checksum = "06c2fa2dd89f704680d957aabdb6f0babdf5b041744739db5e5b36965b1b8ed1" dependencies = [ "anyhow", "chrono", "marine-rs-sdk-main 0.7.1", - "semver 1.0.14", + "semver 1.0.16", "serde", "thiserror", "walrus", @@ -1003,15 +1000,15 @@ dependencies = [ [[package]] name = "marine-module-interface" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ee2b9e4ac777a57359380fca1b1b5f71ff7ffa83a3b2a4aefd56fae4854296" +checksum = "311dad103f02acae6371adbeecbb18e01a0daf3fac7b9947ee020581f38841fa" dependencies = [ "anyhow", "itertools", "marine-it-interfaces", "nom", - "semver 1.0.14", + "semver 1.0.16", "serde", "thiserror", "walrus", @@ -1080,9 +1077,9 @@ dependencies = [ [[package]] name = "marine-runtime" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f57e7471e12d4f758f57dc54241fe8a750d2be03725260326f85f18cc0625d" +checksum = "ed92c1e296d3790a78347a49d5519f02ab866d8bc7a2140075c09de6b5562a8c" dependencies = [ "bytesize", "it-json-serde", @@ -1163,12 +1160,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cff7a23a7f3925a712c34dfb9cd87994012d7743f016fd1533e12ab5a8335ca" -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.5.0" @@ -1187,9 +1178,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] @@ -1200,7 +1191,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dac63698b887d2d929306ea48b63760431ff8a24fac40ddb22f9c7f49fb7cab" dependencies = [ - "generic-array 0.14.5", + "generic-array 0.14.6", "multihash-derive", "unsigned-varint 0.5.1", ] @@ -1273,9 +1264,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ "hermit-abi", "libc", @@ -1283,9 +1274,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "page_size" @@ -1321,9 +1312,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +checksum = "b93f386bb233083c799e6e642a9d73db98c24a5deeb95ffc85bf281255dffc98" dependencies = [ "cfg-if 0.1.10", "cloudabi", @@ -1335,15 +1326,15 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "polyplets" @@ -1369,10 +1360,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ + "once_cell", "thiserror", "toml", ] @@ -1403,9 +1395,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "6ef7d57beacfaf2d8aee5937dab7b7f28de3cb8b1828479bb5de2a7106f2bae2" dependencies = [ "unicode-ident", ] @@ -1423,9 +1415,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -1443,21 +1435,19 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.3" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1482,9 +1472,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-transmute" @@ -1500,9 +1490,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "semver" @@ -1515,9 +1505,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" [[package]] name = "semver-parser" @@ -1527,9 +1517,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] @@ -1546,18 +1536,18 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54" +checksum = "718dc5fff5b36f99093fc49b280cfc96ce6fc824317783bff5a1fed0c7a64819" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -1566,9 +1556,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "itoa", "ryu", @@ -1577,9 +1567,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bf4a5a814902cd1014dbccfa4d4560fb8432c779471e96e035602519f82eef" +checksum = "30d904179146de381af4c93d3af6ca4984b3152db687dacb9c3c35e86f39809c" dependencies = [ "base64", "chrono", @@ -1593,9 +1583,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3452b4c0f6c1e357f73fdb87cd1efabaa12acf328c7a528e252893baeb3f4aa" +checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e" dependencies = [ "darling", "proc-macro2", @@ -1605,9 +1595,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc88c725d61fc6c3132893370cac4a0200e3fedf5da8331c570664b1987f5ca2" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "static_assertions" @@ -1629,9 +1619,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.103" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -1658,27 +1648,27 @@ checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d" [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -1687,9 +1677,9 @@ dependencies = [ [[package]] name = "time" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", @@ -1740,18 +1730,18 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "types" @@ -1787,30 +1777,30 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" -version = "0.1.20" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dee68f85cab8cf68dec42158baf3a79a1cdc065a8b103025965d6ccb7f6cbd" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" [[package]] name = "unicode-width" @@ -1820,9 +1810,9 @@ checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "unicode-xid" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "unsigned-varint" @@ -1838,13 +1828,12 @@ checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] @@ -1854,7 +1843,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.8", ] [[package]] @@ -1863,7 +1852,7 @@ version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c" dependencies = [ - "getrandom 0.2.7", + "getrandom 0.2.8", ] [[package]] @@ -2052,7 +2041,7 @@ dependencies = [ "log", "nom", "safe-transmute", - "semver 1.0.14", + "semver 1.0.16", "serde", "serde_json", "thiserror", @@ -2145,7 +2134,7 @@ dependencies = [ "log", "serde", "thiserror", - "time 0.1.44", + "time 0.1.45", "typetag", "wasmer-runtime-core-fl", "winapi", diff --git a/service/build.sh b/service/build.sh index 93cc732..d062d4d 100755 --- a/service/build.sh +++ b/service/build.sh @@ -6,7 +6,6 @@ cd "$(dirname "$0")" # This script builds all subprojects and puts all created Wasm modules in one dir cd effector -cargo update --aggressive marine build --release cd ../pure diff --git a/service/effector/Cargo.toml b/service/effector/Cargo.toml index 929fa50..367df9f 100644 --- a/service/effector/Cargo.toml +++ b/service/effector/Cargo.toml @@ -15,6 +15,7 @@ multiaddr = { version = "0.11.2", package = "fluence-fork-parity-multiaddr" } log = "0.4.14" eyre = "0.6.5" serde_json = "1.0.64" +itertools = "0.10.5" types = { path = "../types" } diff --git a/service/effector/src/effector.rs b/service/effector/src/effector.rs index 00cc89e..c57c02f 100644 --- a/service/effector/src/effector.rs +++ b/service/effector/src/effector.rs @@ -16,14 +16,14 @@ #![allow(improper_ctypes)] -use types::{IpfsGetPeerIdResult, IpfsPutResult, IpfsResult}; - +use eyre::{Result, WrapErr}; use marine_rs_sdk::marine; use marine_rs_sdk::module_manifest; use marine_rs_sdk::MountedBinaryResult; use marine_rs_sdk::WasmLoggerBuilder; -use eyre::{Result, WrapErr}; +use itertools::Itertools; +use types::{IpfsCatResult, IpfsGetPeerIdResult, IpfsPutResult, IpfsResult}; module_manifest!(); @@ -34,25 +34,28 @@ pub fn main() { .unwrap(); } -fn unwrap_mounted_binary_result(result: MountedBinaryResult) -> Result { +/// Run `ipfs` mounted binary with the specified arguments +fn run_ipfs(cmd: Vec) -> Result { + let result = ipfs(cmd.clone()); + result .into_std() .ok_or(eyre::eyre!( "stdout or stderr contains non valid UTF8 string" ))? - .map_err(|e| eyre::eyre!("ipfs cli call failed: {}", e)) + .map_err(|e| eyre::eyre!("ipfs cli call failed \n{:?}: {}", cmd.iter().join(" "), e)) } #[inline] -fn get_timeout_string(timeout: u64) -> String { - format!("{}s", timeout) +fn format_timeout(timeout_sec: u64) -> String { + format!("{}s", timeout_sec) } fn make_cmd_args(args: Vec, api_multiaddr: String, timeout_sec: u64) -> Vec { args.into_iter() .chain(vec![ String::from("--timeout"), - get_timeout_string(timeout_sec), + format_timeout(timeout_sec), String::from("--api"), api_multiaddr, ]) @@ -66,7 +69,7 @@ pub fn connect(multiaddr: String, api_multiaddr: String, timeout_sec: u64) -> Ip let args = vec![String::from("swarm"), String::from("connect"), multiaddr]; let cmd = make_cmd_args(args, api_multiaddr, timeout_sec); - unwrap_mounted_binary_result(ipfs(cmd)).map(|_| ()).into() + run_ipfs(cmd).map(|_| ()).into() } /// Put file from specified path to IPFS and return its hash. @@ -91,12 +94,10 @@ pub fn put(file_path: String, api_multiaddr: String, timeout_sec: u64) -> IpfsPu log::info!("ipfs put args {:?}", cmd); - unwrap_mounted_binary_result(ipfs(cmd)) - .map(|res| res.trim().to_string()) - .into() + run_ipfs(cmd).map(|res| res.trim().to_string()).into() } -/// Get file by provided hash from IPFS, saves it to a temporary file and returns a path to it. +/// Get file by provided hash from IPFS, save it to a `file_path, and return that path #[marine] pub fn get(hash: String, file_path: String, api_multiaddr: String, timeout_sec: u64) -> IpfsResult { log::info!("get called with hash {}", hash); @@ -111,7 +112,7 @@ pub fn get(hash: String, file_path: String, api_multiaddr: String, timeout_sec: log::info!("ipfs get args {:?}", cmd); - unwrap_mounted_binary_result(ipfs(cmd)) + run_ipfs(cmd) .map(|output| { log::info!("ipfs get output: {}", output); }) @@ -123,7 +124,7 @@ pub fn get_peer_id(api_multiaddr: String, timeout_sec: u64) -> IpfsGetPeerIdResu let result: Result = try { let cmd = make_cmd_args(vec![String::from("id")], api_multiaddr, timeout_sec); - let result = unwrap_mounted_binary_result(ipfs(cmd))?; + let result = run_ipfs(cmd)?; let result: serde_json::Value = serde_json::from_str(&result).wrap_err("ipfs response parsing failed")?; result @@ -135,7 +136,22 @@ pub fn get_peer_id(api_multiaddr: String, timeout_sec: u64) -> IpfsGetPeerIdResu }; result - .map_err(|e| eyre::eyre!("get_peer_id: {:?}", e)) + .map_err(|e| eyre::eyre!("get_peer_id error: {:?}", e)) + .into() +} + +/// Cat file by provided hash from IPFS, +#[marine] +pub fn cat(hash: String, api_multiaddr: String, timeout_sec: u64) -> IpfsCatResult { + log::info!("cat called with hash {}", hash); + + let args = vec![String::from("cat"), hash]; + let cmd = make_cmd_args(args, api_multiaddr, timeout_sec); + + log::info!("ipfs cat args {:?}", cmd); + + run_ipfs(cmd) + .map_err(|e| eyre::eyre!("ipfs cat error: {:?}", e)) .into() } diff --git a/service/pure/src/pure.rs b/service/pure/src/pure.rs index b0476e7..2fd7bff 100644 --- a/service/pure/src/pure.rs +++ b/service/pure/src/pure.rs @@ -16,7 +16,10 @@ #![allow(improper_ctypes)] -use types::{IpfsGetPeerIdResult, IpfsGetResult, IpfsMultiaddrResult, IpfsPutResult, IpfsResult}; +use types::{ + IpfsCatResult, IpfsGetPeerIdResult, IpfsGetResult, IpfsMultiaddrResult, IpfsPutResult, + IpfsResult, +}; use marine_rs_sdk::marine; use marine_rs_sdk::module_manifest; @@ -151,11 +154,11 @@ pub fn get_from(hash: String, external_multiaddr: String) -> IpfsGetResult { let config = load_config(); let timeout = config.timeout; - let particle_id = marine_rs_sdk::get_call_parameters().particle_id; if Multiaddr::from_str(&external_multiaddr).is_err() { return Err(eyre::eyre!("invalid multiaddr: {}", external_multiaddr)).into(); } + let particle_id = marine_rs_sdk::get_call_parameters().particle_id; let particle_vault_path = format!("/tmp/vault/{}", particle_id); let path = format!("{}/{}", particle_vault_path, hash); let get_result = ipfs_get(hash, path.clone(), external_multiaddr, timeout); @@ -167,6 +170,29 @@ pub fn get_from(hash: String, external_multiaddr: String) -> IpfsGetResult { } } +#[marine] +pub fn cat(hash: String) -> IpfsCatResult { + let local_maddr = load_local_api_multiaddr().map(|m| m.to_string()); + if local_maddr.is_ok() { + cat_from(hash, local_maddr.unwrap()) + } else { + local_maddr.into() + } +} + +#[marine] +pub fn cat_from(hash: String, external_multiaddr: String) -> IpfsCatResult { + log::info!("cat_from called with hash: {}", hash); + let config = load_config(); + let timeout = config.timeout; + + if Multiaddr::from_str(&external_multiaddr).is_err() { + return Err(eyre::eyre!("invalid multiaddr: {}", external_multiaddr)).into(); + } + + ipfs_cat(hash, external_multiaddr, timeout) +} + #[marine] pub fn get_external_api_multiaddr() -> IpfsMultiaddrResult { load_external_api_multiaddr().map(|m| m.to_string()).into() @@ -347,4 +373,8 @@ extern "C" { #[link_name = "get_peer_id"] pub fn ipfs_get_peer_id(local_multiaddr: String, timeout_sec: u64) -> IpfsGetPeerIdResult; + + /// Get file from ipfs by hash. + #[link_name = "cat"] + pub fn ipfs_cat(hash: String, api_multiaddr: String, timeout_sec: u64) -> IpfsCatResult; } diff --git a/service/types/src/lib.rs b/service/types/src/lib.rs index 87a541a..7c07dd0 100644 --- a/service/types/src/lib.rs +++ b/service/types/src/lib.rs @@ -1,5 +1,6 @@ mod results; pub use results::{ - IpfsGetPeerIdResult, IpfsGetResult, IpfsMultiaddrResult, IpfsPutResult, IpfsResult, + IpfsCatResult, IpfsGetPeerIdResult, IpfsGetResult, IpfsMultiaddrResult, IpfsPutResult, + IpfsResult, }; diff --git a/service/types/src/results.rs b/service/types/src/results.rs index 987269a..fa9f421 100644 --- a/service/types/src/results.rs +++ b/service/types/src/results.rs @@ -133,3 +133,27 @@ impl From> for IpfsMultiaddrResult { } } } + +#[marine] +pub struct IpfsCatResult { + pub success: bool, + pub error: String, + pub contents: String, +} + +impl From> for IpfsCatResult { + fn from(result: Result) -> Self { + match result { + Ok(contents) => Self { + success: true, + error: "".to_string(), + contents, + }, + Err(err) => Self { + success: false, + error: err.to_string(), + contents: "".to_string(), + }, + } + } +}