refactor(review): shell current-thread runtime + единый дефолт; PowerClient parse_enum; тесты на ipc::names

- shell: new_current_thread рантайм (без пула на холодном старте, #11); единый Initial::default().
- PowerClient: generic parse_enum (убрал 3 копии map_err).
- ipc::names::power::MOCK_IFACE; интеграционные тесты — через ipc::names (не хардкод).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Alexander <akotenev2003@gmail.com>
This commit is contained in:
2026-06-24 14:36:50 +03:00
parent 69beaad596
commit bfe490e899
5 changed files with 29 additions and 22 deletions
+9 -4
View File
@@ -83,7 +83,11 @@ impl Default for Initial {
/// Одноразовое чтение состояния с шины (best-effort). Без шины/сервисов — дефолты (#4).
fn read_initial() -> Initial {
let rt = match tokio::runtime::Runtime::new() {
// current-thread рантайм: одно best-effort чтение на холодном старте, без пула потоков (#11).
let rt = match tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
{
Ok(rt) => rt,
Err(_) => return Initial::default(),
};
@@ -99,6 +103,7 @@ fn read_initial() -> Initial {
}
async fn connect_and_read() -> anyhow::Result<Initial> {
let def = Initial::default(); // единый источник дефолтов (без дублей литералов)
let conn = shturman_sdk::connect().await?;
let settings = shturman_sdk::SettingsClient::new(&conn).await?;
let theme = settings
@@ -106,17 +111,17 @@ async fn connect_and_read() -> anyhow::Result<Initial> {
.await
.ok()
.and_then(|v| String::try_from(v).ok())
.unwrap_or_else(|| "auto".into());
.unwrap_or(def.theme);
let power = shturman_sdk::PowerClient::new(&conn).await?;
let ignition = power
.ignition_state()
.await
.map(|i| i.as_str().to_string())
.unwrap_or_else(|_| "unknown".into());
.unwrap_or(def.ignition);
Ok(Initial {
theme,
ignition,
network: "unknown".into(),
network: def.network,
})
}