Rust 基础
本页面介绍在灵动桌面框架开发中最常用的 Rust 概念,示例均取自框架源码。
所有权与借用
Rust 最核心的特性,编译期保证内存安全:
// 借用(引用)— 不转移所有权
pub fn greet(name: &str) -> Result<String, CommandError> {
Ok(format!("Hello, {}! 来自 Rust 的问候!", name))
}
Result 错误处理
框架中所有可能失败的操作都返回 Result,用 ? 向上传播错误(services/config.rs):
pub fn get(db: &Database, key: &str) -> Result<String, AppError> {
db.get_config(key)? // ? 自动传播数据库错误
.ok_or_else(|| AppError::NotFound(format!("配置项 '{}' 不存在", key)))
}
Option 转 Result 用 ok_or_else,把“查不到”变成明确的业务错误。
结构体
use serde::{Deserialize, Serialize};
/// 应用配置(models/mod.rs)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AppConfig {
pub key: String,
pub value: String,
}
字段名不会自动转驼峰
模型上没有 #[serde(rename_all = "camelCase")],序列化后的 JSON 字段名与 Rust 字段名一致(如 app_version)。前端类型的字段名必须与之对齐,或在 Rust 侧显式加 rename_all。
共享可变状态
Database 用 Mutex<Connection> 保证线程安全,加锁失败不 unwrap,而是转换成 AppError:
let conn = self.conn.lock().map_err(|e| AppError::Custom(e.to_string()))?;
类型对照表
| Rust | TypeScript |
|---|---|
String / &str | string |
i32 / i64 / u16 | number |
bool | boolean |
Vec<T> | T[] |
Option<T> | T | null |
HashMap<String, T> | Record<string, T> |
() | void |
常用 Crate
| Crate | 用途 |
|---|---|
tauri | Tauri 2 核心(启用 tray-icon 特性) |
serde / serde_json | 序列化/反序列化 |
rusqlite | SQLite 数据库(0.31,bundled 特性内置 SQLite) |
thiserror | 错误类型定义(2.x) |
log | 日志门面,输出由 tauri-plugin-log 接管 |
chrono | 日期时间(shared/time_utils.rs) |
axum / tokio / tower-http | 远程访问网关(remote/)的 HTTP 服务 |
tauri-plugin-* | opener、store、log、updater、process、single-instance 官方插件 |