34 个版本 (4 个重大更改)

0.6.1 2021 年 4 月 27 日
0.5.0 2021 年 3 月 12 日
0.2.14 2020 年 12 月 31 日
0.2.9 2020 年 11 月 8 日
0.2.0 2020 年 7 月 28 日

#10#interface-types

每月下载 26 次
9 个crate中(直接使用2个) 使用

Apache-2.0

110KB
2.5K SLoC

Marine Rust SDK

crates.io version

此SDK使开发者能够创建通用Wasm模块,并通过使用interface-types无共享链接方案,将它们组合成一个多模块设置。SDK提供了所有必要的宏和其他功能,使Wasm开发过程尽可能接近“纯”Rust。编译的模块旨在使用Marine运行时运行。

使用方法

SDK的核心组件是#[marine]宏,该宏可以应用于导出函数、外部块和结构。让我们考虑一个具有一个导出函数的简单模块场景

use marine_rs_sdk::marine;

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

此代码导入了Marine SDK,并使用#[marine]宏包装了问候函数。任何以这种方式包装的函数都将从编译的Wasm模块中导出。

要将此代码编译为Wasm,您需要Marine CLI工具。如果您尚未安装CLI,请使用cargo install marine

marine build --release

最后,您将获得一个嵌入到Wasm二进制文件中的构建清单,并可以与Marine REPL(mrepl)中的模块交互。如果您还没有,请使用cargo install mrepl进行安装

> marine info ./target/wasm32-wasi/release/greeting.wasm
it version:  0.23.1
sdk version: 0.7.0
authors:     <user-name>
version:     0.1.0
description:
repository:
build time:  2023-02-15 18:52:37.865550 +00:00 UTC

> mrepl --quiet
1> load greeting ./target/wasm32-wasi/release/greeting.wasm
module successfully loaded into App service
elapsed time: 52.153308ms

2> interface
Application service interface:
greeting:
  fn greeting(name: String) -> String

3> call greeting greeting "user"
result: String("Hi, user")
 elapsed time: 132.021µs

关于开发此简单模块的完整指南,请参阅此处

SDK组件

SDK导出了以下主要组件

支持的Rust类型

目前,#[marine] 宏允许以下Rust类型作为导出和导入函数的参数或结构体字段的类型

  • 以下Rust基本类型之一:boolu8u16u32u64i8i16i32i64f32f64
  • 字符串 String&str
  • 以上类型的元素组成的向量
  • 由以上类型的向量组成的向量,允许递归,例如,类型 Vec<Vec<Vec<u8>>> 是可接受的
  • 所有以上类型的引用
  • 所有字段都是基本Rust类型的结构体
  • 所有字段都是以上类型或其他以这种方式构建的结构体的结构体

文档

同时,查看我们的 YouTube 频道

仓库结构

  • crates
  • src 包含了 call_parameters 和 mounted_binary 模块,并重新导出了所有必要的用户相关内容

支持

如果您发现了一个错误,请提交问题。您也可以在 DiscordTelegram 上联系我们。我们将尽力尽快解决此问题。

贡献

任何感兴趣的人都可以为该项目做出贡献。请确保您阅读并遵守一些基本的 规则

许可证

所有软件代码版权所有(c)Fluence Labs, Inc.,遵循Apache-2.0许可证。

依赖项

~3MB
~63K SLoC