Rust コマンドの実行結果(戻り値)を JS 側で受け取る方法を解説します。
Rust 側の戻り値は serde::Serialize を実装している必要があります。
Rust 側の定義
use serde::Serialize;
#[derive(Serialize)]
struct User {
id: u32,
username: String,
role: String,
}
#[tauri::command]
fn get_current_user() -> User {
User {
id: 1,
username: "admin".into(),
role: "Administrator".into(),
}
}
フロントエンド側の実装
TypeScript のジェネリクスを使用すると、戻り値に型を付けることができます。
import { invoke } from '@tauri-apps/api/core';
interface User {
id: number;
username: string;
role: string;
}
const user = await invoke<User>('get_current_user');
console.log(`Hello, ${user.username}`);
非同期 (async) でシリアライズ/デシリアライズを経てデータが渡されます。
バイナリデータ(Vec<u8>)を返す場合は、JSON 配列 (number[]) ではなく Uint8Array として受け取れるように最適化されています(v2 の IPC 最適化による)。