Skip to content

数据序列化

前后端之间的数据通过 JSON 格式传输。Rust 端使用 serde 库进行序列化/反序列化。

基本原理

TypeScript 对象 → JSON → Rust 结构体
Rust 结构体 → JSON → TypeScript 对象

Rust 端定义

rust
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct AppConfig {
    pub id: i64,
    pub key: String,
    pub value: String,
    pub created_at: String,
    pub updated_at: String,
}

#[derive(Debug, Serialize)]
pub struct SystemInfo {
    pub os_type: String,
    pub os_version: String,
    pub hostname: String,
    pub app_version: String,
}

TypeScript 端对应类型

typescript
// src/types/config.ts
export interface AppConfig {
  id: number
  key: string
  value: string
  created_at: string
  updated_at: string
}

// src/types/system.ts
export interface SystemInfo {
  os_type: string
  os_version: string
  hostname: string
  app_version: string
}

命名转换

Rust 使用 snake_case,TypeScript 使用 camelCase。可以用 serde 属性控制:

rust
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UserInfo {
    pub user_name: String,    // → JSON: "userName"
    pub email_addr: String,   // → JSON: "emailAddr"
}

Command 中使用

rust
#[tauri::command]
pub fn get_system_info() -> Result<SystemInfo, CommandError> {
    Ok(SystemInfo {
        os_type: std::env::consts::OS.to_string(),
        os_version: "".to_string(),
        hostname: hostname::get()
            .unwrap_or_default()
            .to_string_lossy()
            .to_string(),
        app_version: env!("CARGO_PKG_VERSION").to_string(),
    })
}

注意事项

类型对齐

确保 Rust 结构体和 TypeScript 接口的字段名和类型严格对齐,否则会导致运行时反序列化错误。

  • i64 / i32number
  • Stringstring
  • boolboolean
  • Vec<T>T[]
  • Option<T>T | null
  • HashMap<String, T>Record<string, T>

基于 Tauri 2.x 构建的企业级桌面应用开发框架