// moomem 统一错误类型。
// 一切可失败函数返回 Result[T, MoomemError];禁止 panic / abort。
///|
/// moomem 全库唯一错误类型。
/// 声明为 suberror:内部实现可用 raise 风格传播,公开 API 统一 Result[T, MoomemError]。
pub(all) suberror MoomemError {
/// user_id 非法:含路径穿越字符 / 非法字符 / 超长 / 为空
InvalidUserId(String)
/// 存储损坏:header 缺失 / 版本不符 / 双槽均损坏 / 快照中位损坏
StoreCorrupted(String)
/// fs 层错误包装
IoFailure(String)
/// 提取器连续失败达到上限
ExtractionFailure(String)
/// 嵌入服务失败
EmbeddingFailure(String)
/// 当前后端不支持该操作(如 wasm/js 无注入后端时的写操作)
BackendUnsupported(String)
/// 状态机非法迁移 / 非法操作(如 store 已关闭、目标条目不存在)
InvalidOperation(String)
}
///|
/// 手写 Show(原 derive(Show) 输出格式保持不变:Variant(payload))。
pub impl Show for MoomemError with fn output(self, logger) {
match self {
InvalidUserId(detail) => logger.write_string("InvalidUserId(\{detail})")
StoreCorrupted(detail) => logger.write_string("StoreCorrupted(\{detail})")
IoFailure(detail) => logger.write_string("IoFailure(\{detail})")
ExtractionFailure(detail) =>
logger.write_string("ExtractionFailure(\{detail})")
EmbeddingFailure(detail) =>
logger.write_string("EmbeddingFailure(\{detail})")
BackendUnsupported(detail) =>
logger.write_string("BackendUnsupported(\{detail})")
InvalidOperation(detail) =>
logger.write_string("InvalidOperation(\{detail})")
}
}
///|
pub extend MoomemError with Show::{to_string, output}
///|
/// 人类可读的错误消息(含上下文),供宿主程序展示。
pub fn MoomemError::message(self : MoomemError) -> String {
match self {
InvalidUserId(detail) => "invalid user_id: \{detail}"
StoreCorrupted(detail) => "store corrupted: \{detail}"
IoFailure(detail) => "io failure: \{detail}"
ExtractionFailure(detail) => "extraction failure: \{detail}"
EmbeddingFailure(detail) => "embedding failure: \{detail}"
BackendUnsupported(detail) => "backend unsupported: \{detail}"
InvalidOperation(detail) => "invalid operation: \{detail}"
}
}
///|
/// 错误类别短名(供 metadata / 日志使用)
pub fn MoomemError::kind(self : MoomemError) -> String {
match self {
InvalidUserId(_) => "invalid_user_id"
StoreCorrupted(_) => "store_corrupted"
IoFailure(_) => "io_failure"
ExtractionFailure(_) => "extraction_failure"
EmbeddingFailure(_) => "embedding_failure"
BackendUnsupported(_) => "backend_unsupported"
InvalidOperation(_) => "invalid_operation"
}
}