- src/gotify/api.rs: blocking reqwest 封装(§14);health / applications / messages 三个方法;Bearer token 用 HeaderValue::set_sensitive 标记,日志绝不泄露(§20);10s per-request timeout - src/gotify/model.rs: GotifyHealth / GotifyApplication / GotifyMessage DTO 镜像官方 wire schema;defaultPriority 加 rename(camelCase) - src/gotify/mod.rs: re-export - src/error.rs: 加 AppError::Gotify(String) - Cargo.toml: reqwest 0.12 (blocking + json + rustls-tls) 从注释升级为真 依赖(AGENTS.md §44 模板里早就列了,Phase 1 当时推迟) - tests/gotify_api.rs: 6 个 JSON 解析测试 避坑: - reqwest 0.12 默认 log Bearer token;要 set_sensitive(true) 才行 - reqwest::Error 转 AppError 不能用返回 impl Fn 的 helper(path 是 &str 不是 'static)—— 改成每个调用点 inline closure - Gotify 的 defaultPriority 是 camelCase,其他字段都是单字; 用 #[serde(rename = "defaultPriority")] 单点 rename 而不是全局 rename_all = "camelCase"(因为 Rust 端字段名是 snake_case) 验证:cargo build / build --release 都 exit 0,0 warning - cargo test --test gotify_api: 6 passed; 0 failed - debug 27.88 MB, subsystem = WINDOWS_CUI - release 8.10 MB, subsystem = WINDOWS_GUI(reqwest 加进 release LTO 后体积几乎没变——rustls 是大头但被 strip + LTO 吃掉了)
59 lines
1.8 KiB
TOML
59 lines
1.8 KiB
TOML
# Cargo.toml — Phase 1 (Bootstrap).
|
|
#
|
|
# Dependency rationale lives in AGENTS.md §44. Only the crates actually used
|
|
# by Phase 1 are listed; the remaining crates (reqwest / tungstenite / serde /
|
|
# url / anyhow / ...) are added in later phases when their modules land.
|
|
|
|
[package]
|
|
name = "windows-gotify-client-rust"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
rust-version = "1.75"
|
|
description = "Lightweight, modern, Windows-native Gotify desktop client (Rust + Slint)"
|
|
license = "MIT"
|
|
readme = "README.md"
|
|
authors = ["KennethCheng <a1478925630@163.com>"]
|
|
|
|
[[bin]]
|
|
name = "windows-gotify-client-rust"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
# --- UI ---
|
|
# `slint` crate. The `slint!{}` macro is compiled in via the default feature
|
|
# set in 1.x (verified against 1.18.0 — `internal-interpreter` was removed in
|
|
# 1.x). The Windows GUI backend (`backend-winit`) is also part of defaults.
|
|
# Phase 2 will likely switch from the embedded macro to `include_slint!()`
|
|
# + standalone .slint files under `ui/`.
|
|
slint = "1"
|
|
|
|
# --- Logging ---
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
|
|
|
# --- Error handling ---
|
|
thiserror = "2"
|
|
|
|
# --- Serialization (Phase 2 C3 storage) ---
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
|
|
# --- Networking (Phase 3 Gotify HTTP) ---
|
|
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] }
|
|
|
|
# Slint's `.slint` files are compiled by `build.rs`; see build.rs.
|
|
[build-dependencies]
|
|
slint-build = "1"
|
|
|
|
[profile.release]
|
|
# See AGENTS.md §42. The `release-balanced` profile below is the practical
|
|
# default after benchmarking — adjust if startup time regresses.
|
|
opt-level = "z"
|
|
lto = true
|
|
codegen-units = 1
|
|
panic = "abort"
|
|
strip = true
|
|
|
|
[profile.release-balanced]
|
|
inherits = "release"
|
|
opt-level = 3 |