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:
+1
-1
@@ -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"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "shturman-ipc"
|
||||
version = "0.0.0"
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
|
||||
[dependencies]
|
||||
zbus.workspace = true
|
||||
@@ -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),
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user