tuffite0.1
为下一个应用打下基础

从前端调用 Rust

声明一次,生成绑定,注册类型化处理器。

实验性源码版本。生产安全加固与 SDK 发布仍在进行中。

声明接口契约#

在 build.shellApi.definitions 中列出声明文件,并将 build.shellApi.namespace 设置为 myapp。tuff dev 随契约变更重新生成绑定;tuff build 和 tuff package 也会自动生成。生成器根据类型声明推导二进制编解码器和命令标识。

typescript
export namespace myapp {
  export namespace commands {
    export function ping(message: string): Promise<string>;
  }
}

注册处理器#

Rust 处理器接受生成端点的参数类型。generate_handler! 检查处理器属于同一个应用,并创建分发注册表。重复注册或端点类型不匹配会导致验证失败。

rust
#[tuffite::command(shell_api::commands::Ping)]
fn ping(_app: &mut App, message: String) -> Result<String, tuffite::CommandError> {
    Ok(format!("Hello, {message}"))
}

// Register explicitly in the exported Builder:
// .commands(tuffite::generate_handler![ping])

调用生成门面#

应用门面使用打包的框架传输层。在匹配前端 origin 的 capability 中允许规范方法名,或 myapp.* 等合适的模式。访问门面前先导入生成模块。

javascript
import './generated/index.js';
const answer = await window.myapp.commands.ping('Tuffite');