Files
Genarrative/apps/desktop-shell/src-tauri/src/host_bridge/appearance.rs
T
kdletters f04daee4a4 收口原生外观查询边界
将 Expo 系统配色读取收口到 appearance 模块

将 Tauri 窗口主题读取收口到 appearance 模块

同步原生壳结构门禁和架构文档清单
2026-06-19 21:51:28 +08:00

46 lines
1.3 KiB
Rust

use crate::host_bridge::protocol::{failed, ok, HostBridgeRequest, HostBridgeResponse};
use crate::shell::webview::color_scheme_from_theme;
use serde_json::json;
use tauri::Manager;
pub(crate) fn desktop_appearance_color_scheme(
app: &tauri::AppHandle,
request: &HostBridgeRequest,
) -> HostBridgeResponse {
match app.get_webview_window("main") {
Some(window) => match window.theme() {
Ok(theme) => ok_color_scheme(request, color_scheme_from_theme(theme)),
Err(error) => failed(request.id.clone(), "host_error", error.to_string()),
},
None => failed(request.id.clone(), "host_error", "main window not found"),
}
}
fn ok_color_scheme(request: &HostBridgeRequest, color_scheme: &'static str) -> HostBridgeResponse {
ok(
request.id.clone(),
json!({
"colorScheme": color_scheme
}),
)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::host_bridge::protocol::request;
#[test]
fn ok_color_scheme_reports_contract_shape() {
let response = ok_color_scheme(&request("appearance.getColorScheme"), "dark");
assert!(response.ok);
assert_eq!(
response.result.expect("appearance result"),
json!({
"colorScheme": "dark"
})
);
}
}