26 releases (8 breaking)

0.14.0 Feb 21, 2024
0.12.0 Feb 8, 2024
0.10.3 Dec 28, 2023
0.10.1 Oct 24, 2023
0.6.10 Jun 15, 2021

#27 in #marine

Download history 1510/week @ 2024-07-21 959/week @ 2024-07-28 1048/week @ 2024-08-04 1185/week @ 2024-08-11 592/week @ 2024-08-18 837/week @ 2024-08-25 744/week @ 2024-09-01 953/week @ 2024-09-08 1128/week @ 2024-09-15 914/week @ 2024-09-22 460/week @ 2024-09-29 199/week @ 2024-10-06 478/week @ 2024-10-13 350/week @ 2024-10-20 431/week @ 2024-10-27 398/week @ 2024-11-03

1,668 downloads per month
Used in 40 crates (4 directly)

Apache-2.0

145KB
3K SLoC

Defines the #[marine] macro that should be used with all export functions, extern blocks. At now, It supports the following types that could be used as parameters in export or foreign functions: i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, bool, String, Vec. Also struct where all fields are public and have aforementioned types could be used as parameters. In this case #[marine] should be also applied to this structs.

Examples

This example shows how a function could be exported:

#[marine]
pub fn greeting(name: String) -> String {
    format!("Hi {}", name)
}

This more complex example shows how a function could be imported from another Wasm module and how a struct could be passed:

use marine_rs_sdk::MountedBinaryResult;

#[marine]
pub fn read_ipfs_file(file_path: String) -> MountedBinaryResult {
    let hash = calculate_hash(file_path);
    ipfs(vec![hash])
}

#[marine]
#[link(wasm_import_module = "ipfs_node")]
extern "C" {
    pub fn ipfs(file_hash: Vec<String>) -> MountedBinaryResult;
}

Dependencies

~1.8–2.5MB
~57K SLoC