Richiamare il frontend con Rust in Tauri

Mattepuffo's logo
Richiamare il frontend con Rust in Tauri

Richiamare il frontend con Rust in Tauri

Tauri ha diversi meccanismi per mettere in collegamento il frontend con il backend.

In questo articolo vediamo come richiamare il frontend usando Rust.

Cominciamo dal lib.rs (o da dove fate voi il run):

use tauri::{AppHandle, Emitter};

#[derive(Clone, serde::Serialize)]
struct Payload {
    message: String,
}

#[tauri::command]
fn say_hello(app: AppHandle) -> Result<Payload, String> {
    println!("hello");

    let payload = Payload {
        message: "CIAOO!".into(),
    };

    app.emit("greeting", payload.clone())
        .map_err(|e| e.to_string())?;

    Ok(payload)
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_opener::init())
        .invoke_handler(tauri::generate_handler![say_hello])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

Abbiamo usato emit, che invia il messaggio a livello globale.

Potete anche essere più specifici; guardate la documentazione per altri esempi.

Poi nel main.ts:

import {invoke} from "@tauri-apps/api/core";
import {listen} from "@tauri-apps/api/event";

type Payload = {
    message: string;
};

async function setupListener() {
    await listen<Payload>("greeting", (event) => {
        console.log("Evento ricevuto:", event.payload);
        alert("Evento emit: " + event.payload.message);
    });
}

async function sayHello() {
    const response = await invoke<Payload>("say_hello");
    alert("Risposta invoke: " + response.message);
}

window.addEventListener("DOMContentLoaded", async () => {
    await setupListener();
    await sayHello();
});

Enjoy!


Condividi

Commentami!