// jeeflow-core/error —— 移植自 rust jeeflow-core/src/error.rs
// 引擎错误码:业务失败恒 99999999(spec/06 §2.1,方案 §3.3 只发明 99999999)

///|
pub const ERR_BUSINESS : Int64 = 99999999L

///|
pub(all) suberror JeeflowError {
  Business(String)
  UnknownAction(String)
  DefineNotFound(Int64)
  InstanceNotFound(Int64)
  TaskNotFound(Int64)
  PermissionDenied(String)
  InvalidState(String)
  InvalidSubmitType(Int64)
  ParseError(String)
  Internal(String)
} derive(Eq)

///|
pub fn JeeflowError::code(self : JeeflowError) -> Int64 {
  ERR_BUSINESS
}

///|
pub fn JeeflowError::message(self : JeeflowError) -> String {
  match self {
    Business(msg) => msg
    UnknownAction(a) => "未知 action: \{a}"
    DefineNotFound(id) => "流程定义不存在: \{id}"
    InstanceNotFound(id) => "流程实例不存在: \{id}"
    TaskNotFound(id) => "任务不存在: \{id}"
    PermissionDenied(msg) => "权限不足: \{msg}"
    InvalidState(msg) => "非法状态转换: \{msg}"
    InvalidSubmitType(st) => "非法 submitType: \{st}"
    ParseError(msg) => "解析错误: \{msg}"
    Internal(msg) => "内部错误: \{msg}"
  }
}

///|
impl Show for JeeflowError with fn output(self, logger) {
  logger.write_string(self.message())
}