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:
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user