diff --git a/marine-examples/ipfs-node/.gitignore b/marine-examples/ipfs-node/.gitignore deleted file mode 100644 index 10ceb5d..0000000 --- a/marine-examples/ipfs-node/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -.repl_history -/target -**/**.bak -**/**.bk -/artifacts -keypair.json diff --git a/marine-examples/ipfs-node/Config.toml b/marine-examples/ipfs-node/Config.toml deleted file mode 100644 index c5e30c6..0000000 --- a/marine-examples/ipfs-node/Config.toml +++ /dev/null @@ -1,17 +0,0 @@ -modules_dir = "artifacts/" - -[[module]] - name = "ipfs_effector" - mem_pages_count = 100 - logger_enabled = true - - [module.mounted_binaries] - ipfs = "/usr/local/bin/ipfs" - - [module.wasi] - envs = { "IPFS_ADDR" = "/dns4/relay02.fluence.dev/tcp/15001", "timeout" = "1s" } - -[[module]] - name = "ipfs_pure" - mem_pages_count = 100 - logger_enabled = true diff --git a/marine-examples/ipfs-node/build.sh b/marine-examples/ipfs-node/build.sh deleted file mode 100755 index f758a91..0000000 --- a/marine-examples/ipfs-node/build.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -set -o errexit -o nounset -o pipefail - -# This script builds all subprojects and puts all created Wasm modules in one dir -cd effector -cargo update --aggressive -marine build --release - -cd ../pure -cargo update --aggressive -marine build --release - -cd .. -mkdir -p artifacts -rm -f artifacts/*.wasm -cp effector/target/wasm32-wasi/release/ipfs_effector.wasm artifacts/ -cp pure/target/wasm32-wasi/release/ipfs_pure.wasm artifacts/ diff --git a/marine-examples/ipfs-node/effector/Cargo.toml b/marine-examples/ipfs-node/effector/Cargo.toml deleted file mode 100644 index 606cda4..0000000 --- a/marine-examples/ipfs-node/effector/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "ipfs-effector" -version = "0.1.0" -authors = ["Fluence Labs"] -edition = "2018" -publish = false - -[[bin]] -name = "ipfs_effector" -path = "src/main.rs" - -[dependencies] -marine-rs-sdk = { version = "0.6.10", features = ["logger"] } -log = "0.4.14" \ No newline at end of file diff --git a/marine-examples/ipfs-node/effector/src/main.rs b/marine-examples/ipfs-node/effector/src/main.rs deleted file mode 100644 index f83b23b..0000000 --- a/marine-examples/ipfs-node/effector/src/main.rs +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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)] - -mod path; - -use crate::path::to_full_path; - -use marine_rs_sdk::marine; -use marine_rs_sdk::module_manifest; -use marine_rs_sdk::MountedBinaryResult; -use marine_rs_sdk::WasmLoggerBuilder; - -const RESULT_FILE_PATH: &str = "/tmp/ipfs_rpc_file"; -const IPFS_ADDR_ENV_NAME: &str = "IPFS_ADDR"; -const TIMEOUT_ENV_NAME: &str = "timeout"; - -module_manifest!(); - -pub fn main() { - WasmLoggerBuilder::new() - .with_log_level(log::LevelFilter::Info) - .build() - .unwrap(); -} - -/// Put file from specified path to IPFS and return its hash. -#[marine] -pub fn put(file_path: String) -> String { - log::info!("put called with file path {}", file_path); - - let file_path = to_full_path(file_path); - - let timeout = std::env::var(TIMEOUT_ENV_NAME).unwrap_or_else(|_| "1s".to_string()); - let cmd = vec![ - String::from("add"), - String::from("--timeout"), - timeout, - String::from("-Q"), - file_path, - ]; - - let ipfs_result = ipfs(cmd); - ipfs_result - .into_std() - .unwrap() - .unwrap_or_else(std::convert::identity) -} - -/// Get file by provided hash from IPFS, saves it to a temporary file and returns a path to it. -#[marine] -pub fn get(hash: String) -> String { - log::info!("get called with hash {}", hash); - - let result_file_path = to_full_path(RESULT_FILE_PATH); - - let timeout = std::env::var(TIMEOUT_ENV_NAME).unwrap_or_else(|_| "1s".to_string()); - let cmd = vec![ - String::from("get"), - String::from("--timeout"), - timeout, - String::from("-o"), - result_file_path, - hash, - ]; - - ipfs(cmd); - RESULT_FILE_PATH.to_string() -} - -#[marine] -pub fn get_address() -> String { - match std::env::var(IPFS_ADDR_ENV_NAME) { - Ok(addr) => addr, - Err(e) => format!( - "getting {} env variable failed with error {:?}", - IPFS_ADDR_ENV_NAME, e - ), - } -} - -#[marine] -#[link(wasm_import_module = "host")] -extern "C" { - /// Execute provided cmd as a parameters of ipfs cli, return result. - pub fn ipfs(cmd: Vec) -> MountedBinaryResult; -} diff --git a/marine-examples/ipfs-node/effector/src/path.rs b/marine-examples/ipfs-node/effector/src/path.rs deleted file mode 100644 index 3fa025d..0000000 --- a/marine-examples/ipfs-node/effector/src/path.rs +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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. - */ - -pub(super) fn to_full_path(cmd: S) -> String -where - S: Into, -{ - use std::path::Component; - use std::path::Path; - - let cmd = cmd.into(); - let path = Path::new(&cmd); - - let mut components = path.components(); - let is_absolute = components.next() == Some(Component::RootDir); - - if !is_absolute { - return cmd; - } - - let parent = match components.next() { - Some(Component::Normal(path)) => path.to_str().unwrap(), - _ => return cmd, - }; - - match std::env::var(parent) { - Ok(to_dir) => { - let mut full_path = std::path::PathBuf::from(to_dir); - - // TODO: optimize this - #[allow(clippy::while_let_on_iterator)] - while let Some(component) = components.next() { - full_path.push(component); - } - full_path.to_string_lossy().into_owned() - } - Err(_) => cmd, - } -} diff --git a/marine-examples/ipfs-node/pure/Cargo.toml b/marine-examples/ipfs-node/pure/Cargo.toml deleted file mode 100644 index a82d393..0000000 --- a/marine-examples/ipfs-node/pure/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "ipfs-pure" -version = "0.1.0" -authors = ["Fluence Labs"] -edition = "2018" -publish = false - -[[bin]] -name = "ipfs_pure" -path = "src/main.rs" - -[dependencies] -marine-rs-sdk = { version = "0.6.10", features = ["logger"] } -log = "0.4.14" \ No newline at end of file diff --git a/marine-examples/ipfs-node/pure/src/main.rs b/marine-examples/ipfs-node/pure/src/main.rs deleted file mode 100644 index 7a28624..0000000 --- a/marine-examples/ipfs-node/pure/src/main.rs +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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 std::fs; -use std::path::PathBuf; - -const RPC_TMP_FILEPATH: &str = "/tmp/ipfs_rpc_file"; - -module_manifest!(); - -pub fn main() { - WasmLoggerBuilder::new() - .with_log_level(log::LevelFilter::Info) - .build() - .unwrap(); -} - -#[marine] -pub fn invoke() -> String { - "IPFS_RPC wasm example, it allows to:\ninvoke\nput\nget".to_string() -} - -#[marine] -pub fn put(file_content: Vec) -> String { - log::info!("put called with {:?}", file_content); - - let rpc_tmp_filepath = RPC_TMP_FILEPATH.to_string(); - - let r = fs::write(PathBuf::from(rpc_tmp_filepath.clone()), file_content); - if let Err(e) = r { - return format!("file can't be written: {}", e); - } - - ipfs_put(rpc_tmp_filepath) -} - -#[marine] -pub fn get(hash: String) -> Vec { - log::info!("get called with hash: {}", hash); - - let file_path = ipfs_get(hash); - fs::read(file_path).unwrap_or_else(|_| b"error while reading file".to_vec()) -} - -#[marine] -#[link(wasm_import_module = "ipfs_effector")] -extern "C" { - /// Put provided file to ipfs, return ipfs hash of the file. - #[link_name = "put"] - pub fn ipfs_put(file_path: String) -> String; - - /// Get file from ipfs by hash. - #[link_name = "get"] - pub fn ipfs_get(hash: String) -> String; -}