1use std::fmt;
10
11#[derive(Clone, Debug, PartialEq, Eq)]
12pub enum CoreError {
13 InvalidDelegation(String),
15 InvalidIntent(String),
17 UnknownDelegation(String),
19 DuplicateDelegation(String),
21 LedgerOverflow(String),
23 CommitRejected(String),
26 WalIo(String),
28 WalLocked { path: String, message: String },
31 WalBadLine { line: u64, message: String },
33 WalChainBroken { line: u64, message: String },
36 WalMismatch { line: u64, message: String },
38 AnchorInvalid(String),
41 AnchorMismatch(String),
44}
45
46impl fmt::Display for CoreError {
47 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
48 match self {
49 CoreError::InvalidDelegation(m) => write!(f, "委托注册被拒(非法配置): {m}"),
50 CoreError::InvalidIntent(m) => write!(f, "消费意图非法: {m}"),
51 CoreError::UnknownDelegation(id) => write!(f, "未知委托: {id}"),
52 CoreError::DuplicateDelegation(id) => write!(f, "委托重复注册: {id}"),
53 CoreError::LedgerOverflow(m) => write!(f, "账本溢出(状态异常,fail-closed): {m}"),
54 CoreError::CommitRejected(m) => write!(f, "commit 被拒(闸未放行,API 误用): {m}"),
55 CoreError::WalIo(m) => write!(f, "审计日志 IO 失败(fail-closed): {m}"),
56 CoreError::WalLocked { path, message } => {
57 write!(
58 f,
59 "审计日志单写者锁被占(fail-closed 拒启): {message}[锁文件: {path}]"
60 )
61 }
62 CoreError::WalBadLine { line, message } => {
63 write!(
64 f,
65 "审计日志第 {line} 行损坏(fail-closed,不静默跳过): {message}"
66 )
67 }
68 CoreError::WalChainBroken { line, message } => {
69 write!(
70 f,
71 "审计日志第 {line} 行完整性链断裂(fail-closed): {message}"
72 )
73 }
74 CoreError::WalMismatch { line, message } => {
75 write!(
76 f,
77 "审计日志第 {line} 行回放对账不一致(fail-closed): {message}"
78 )
79 }
80 CoreError::AnchorInvalid(m) => {
81 write!(f, "审计锚点文件不可信(fail-closed): {m}")
82 }
83 CoreError::AnchorMismatch(m) => {
84 write!(f, "审计日志与所有者锚点不符——审计被动过(fail-closed): {m}")
85 }
86 }
87 }
88}
89
90impl std::error::Error for CoreError {}