Appearance
数据序列化
前后端之间的数据通过 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/i32→numberString→stringbool→booleanVec<T>→T[]Option<T>→T | nullHashMap<String, T>→Record<string, T>