Rust コマンドからの戻り値を受け取る

Recipe ID: front-003

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 最適化による)。