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
+8 -9
View File
@@ -5,6 +5,11 @@ use shturman_ipc::proxy::Power1Proxy;
use shturman_ipc::types::{IgnitionState, PowerSource, PowerState};
use zbus::Connection;
/// Распарсить enum-строку с провода; неизвестное значение → zbus-ошибка с меткой типа.
fn parse_enum<T: FromStr>(label: &str, raw: String) -> zbus::Result<T> {
T::from_str(&raw).map_err(|_| zbus::Error::Failure(format!("unknown {label}: {raw}")))
}
/// Эргономичный клиент `ru.shturman.Power`.
pub struct PowerClient {
proxy: Power1Proxy<'static>,
@@ -18,21 +23,15 @@ impl PowerClient {
}
pub async fn power_state(&self) -> zbus::Result<PowerState> {
let s = self.proxy.get_power_state().await?;
PowerState::from_str(&s)
.map_err(|_| zbus::Error::Failure(format!("unknown PowerState: {s}")))
parse_enum("PowerState", self.proxy.get_power_state().await?)
}
pub async fn ignition_state(&self) -> zbus::Result<IgnitionState> {
let s = self.proxy.ignition_state().await?;
IgnitionState::from_str(&s)
.map_err(|_| zbus::Error::Failure(format!("unknown IgnitionState: {s}")))
parse_enum("IgnitionState", self.proxy.ignition_state().await?)
}
pub async fn power_source(&self) -> zbus::Result<PowerSource> {
let s = self.proxy.power_source().await?;
PowerSource::from_str(&s)
.map_err(|_| zbus::Error::Failure(format!("unknown PowerSource: {s}")))
parse_enum("PowerSource", self.proxy.power_source().await?)
}
pub async fn uptime(&self) -> zbus::Result<u64> {