Skip to main content

ek_core/
error.rs

1//! 错误体系:全部公共 API 的错误面。
2
3use std::fmt;
4
5/// 宿主注册/生命周期错误。
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum PluginError {
8    /// 插件名不合法(规则:首字母字母,其余 alnum/_/-,长度 1..=32)。
9    IllegalName(String),
10    /// 重名注册。
11    Duplicate(String),
12    /// deps 指向未注册目标。
13    UnknownDep(String),
14    /// start 时 deps 构成环(列出环上点名)。
15    DepCycle(Vec<String>),
16    /// get/remove 等操作目标不存在。
17    UnknownName(String),
18    /// 宿主已 start():停止接受 add_plugin。
19    HostStarted,
20    /// 宿主已 close():一切变更被拒。
21    Stopped,
22}
23
24impl fmt::Display for PluginError {
25    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26        match self {
27            Self::IllegalName(n) => write!(f, "illegal plugin name: {n:?}"),
28            Self::Duplicate(n) => write!(f, "duplicate plugin: {n:?}"),
29            Self::UnknownDep(n) => write!(f, "unknown dependency: {n:?}"),
30            Self::DepCycle(c) => write!(f, "dependency cycle: {c:?}"),
31            Self::UnknownName(n) => write!(f, "unknown plugin: {n:?}"),
32            Self::HostStarted => write!(f, "host already started"),
33            Self::Stopped => write!(f, "host closed"),
34        }
35    }
36}
37impl std::error::Error for PluginError {}
38
39/// 请求应答(ask)错误。
40#[derive(Debug, Clone, PartialEq, Eq)]
41pub enum AskError {
42    /// 目标 worker 未能在时限内回包(目标慢/挂/邮箱拥塞)。
43    Timeout { target: String },
44    /// 目标不存在/未 Running/已被检疫或移除(尽力而为的预检 + 断连快失败)。
45    TargetGone { target: String },
46    /// 回包/请求契约不匹配(错型信封),或 B 明确回 Err(InvalidPayload)。
47    InvalidPayload { target: String },
48    /// 总线已停(put 失败)。
49    BusStopped,
50}
51
52impl fmt::Display for AskError {
53    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
54        match self {
55            Self::Timeout { target } => write!(f, "ask timeout: {target}"),
56            Self::TargetGone { target } => write!(f, "ask target gone: {target}"),
57            Self::InvalidPayload { target } => write!(f, "ask invalid payload/contract: {target}"),
58            Self::BusStopped => write!(f, "bus stopped"),
59        }
60    }
61}
62impl std::error::Error for AskError {}