Skip to main content

helix_im/
error.rs

1//! IM 业务域错误
2
3use thiserror::Error;
4
5/// IM 业务域错误。
6///
7/// ## MIN-2 修复:删除双向 From 套娃
8///
9/// 原 `ImError::Core(#[from] CoreError)` + `CoreError::ModuleError{ source: Box<dyn Error> }`
10/// 形成双向 From 路径(ImError → CoreError → ImError),可产生无限嵌套错误链。
11///
12/// 修复:删除 `ImError::Core` 及其 `#[from]` 自动实现。
13/// 依赖方向应单向:helix-core 不依赖 helix-im,helix-im 的错误不应反持 CoreError。
14/// IM 内部错误通过 `CoreError::ModuleError { source: Box<dyn Error> }` 向上传播,
15/// 但 IM 自身不持有 CoreError(避免循环持有)。
16///
17/// 若需要包装外部错误,在 `module.rs` 的 `handle` 方法中显式 map_err 到 CoreError。
18#[derive(Debug, Clone, Error)]
19pub enum ImError {
20    #[error("parse error: {0}")]
21    Parse(String),
22
23    #[error("unsupported websocket action: {0}")]
24    UnsupportedWsAction(String),
25
26    #[error("duplicate websocket action handler: {0}")]
27    DuplicateWsAction(String),
28
29    #[error("invalid websocket handler registration: registered {registered}, handler {handler}")]
30    InvalidWsHandlerRegistration { registered: String, handler: String },
31
32    #[error("incomplete websocket handler registry: expected {expected}, got {actual}")]
33    IncompleteWsHandlerRegistry { expected: usize, actual: usize },
34
35    #[error("invalid websocket frame: {0}")]
36    InvalidWsFrame(String),
37
38    #[error("invalid seq: expected {expected}, got {got}")]
39    InvalidSeq { expected: u64, got: u64 },
40
41    #[error("unknown channel: {0}")]
42    UnknownChannel(u64),
43
44    #[error("unknown correlation: {0}")]
45    UnknownCorrelation(u64),
46
47    #[error("serialize error: {0}")]
48    Serialize(String),
49}