feat(ipc): Error (ru.shturman.Error.*) + well-known имена

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 12:07:29 +03:00
parent df553790ae
commit d91d218ade
5 changed files with 64 additions and 1 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
resolver = "2"
# Члены растут по планам реализации. crates/core, crates/apps, crates/tools —
# группировка привилегированного ядра / first-party-апов / dev-инструментов (architecture §3).
members = ["crates/shturman-common"]
members = ["crates/shturman-common", "crates/shturman-ipc"]
[workspace.package]
edition = "2021"
+8
View File
@@ -0,0 +1,8 @@
[package]
name = "shturman-ipc"
version = "0.0.0"
edition.workspace = true
license.workspace = true
[dependencies]
zbus.workspace = true
+20
View File
@@ -0,0 +1,20 @@
//! Контракт ошибок шины — `ru.shturman.Error.*` (ipc §2).
/// D-Bus-ошибки Штурмана. Маппинг в `ru.shturman.Error.<Variant>` — через `zbus::DBusError`.
/// В v0 реально используется `InvalidArgument` (Settings); остальные — зарезервированы по мере сервисов.
#[derive(Debug, zbus::DBusError)]
#[zbus(prefix = "ru.shturman.Error")]
pub enum Error {
/// Транспортные ошибки zbus (catch-all).
#[zbus(error)]
ZBus(zbus::Error),
PermissionDenied(String),
/// PID/сигнал не поддержан машиной (постоянно).
NotAvailable(String),
/// Транзиентно: устарело / двигатель заглушен / таймаут.
Stale(String),
Timeout(String),
ReadOnly(String),
InvalidArgument(String),
Unsupported(String),
}
+8
View File
@@ -0,0 +1,8 @@
//! Контракт D-Bus Штурмана: имена/пути/версии интерфейсов, типы ошибок, enum-типы и `#[proxy]`-трейты.
//! Источник правды по шине (ipc.md). `sdk` и сервисы используют его по разные стороны границы
//! (architecture §3): сервисы реализуют `#[interface]`, клиенты берут `#[proxy]`.
pub mod error;
pub mod names;
pub use error::Error;
+27
View File
@@ -0,0 +1,27 @@
//! Well-known имена / пути объектов / имена интерфейсов (ipc §2).
//! `ru.shturman.<Service>` · `/ru/shturman/<Service>` · `ru.shturman.<Service>N` (N = мажор).
pub mod power {
pub const NAME: &str = "ru.shturman.Power";
pub const PATH: &str = "/ru/shturman/Power";
pub const IFACE: &str = "ru.shturman.Power1";
}
pub mod settings {
pub const NAME: &str = "ru.shturman.Settings";
pub const PATH: &str = "/ru/shturman/Settings";
pub const IFACE: &str = "ru.shturman.Settings1";
}
#[cfg(test)]
mod tests {
#[test]
fn names_follow_convention() {
assert_eq!(super::power::NAME, "ru.shturman.Power");
assert_eq!(super::power::PATH, "/ru/shturman/Power");
assert_eq!(super::power::IFACE, "ru.shturman.Power1");
assert_eq!(super::settings::NAME, "ru.shturman.Settings");
assert_eq!(super::settings::PATH, "/ru/shturman/Settings");
assert_eq!(super::settings::IFACE, "ru.shturman.Settings1");
}
}