Sign in

    mldong/jeeflow-core/error does not have a README file

    JeeflowError

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

    JeeflowError::code

    fn JeeflowError::code(self : JeeflowError) -> Int64

    JeeflowError::detail

    fn JeeflowError::detail(self : JeeflowError) -> String?

    cause 分离里"进日志"的那一半:只有带底层详情的变体返回 Some。 出口 msg 走 message()(只给固定文案),日志走这里(原文照抄,不裁剪不转义)。

    JeeflowError::equal

    automatically derived

    JeeflowError::is_foreign_detail

    fn JeeflowError::is_foreign_detail(self : JeeflowError) -> Bool

    「这条错误的 message 能不能原样进对外 msg」判别式(issues/137 §3-1 · spec 06 §2.12; 对应 java JeeflowFacade.isForeignDetail(type,message,cause,trace):true ⇒ 属内部信息 ⇒ 出口只给 INTERNAL_FAILURE_MSG,原文只进日志与 detail(),不得拼进 msg 或任何其它对外字段)。

    java 要五条启发式(message null/契约族/裸包装/运行时类型族/抛出点),是因为它的契约文案 散落在 JeeflowException 与约十处裸 RuntimeException/ISE/IAE 上,只能逐条判「谁写的文案」。 本栈变体即档位(批三 §1.5):Internal 是唯一内部档——mysql 驱动五条腿 (conn/tx 的 Internal("mysql …: 驱动原文"))与一切内部自诊断都走它;其余变体的 message 全部是引擎自己写的契约文案(八栈+十三壳+前端 toast 逐字对齐)⇒ 照旧透出。所以判别式 收敛成「变体是不是 Internal」一条,不移植 java 的类型族启发式(把简单问题复杂化)。 纯函数、零副作用:文案判据(本函数)与副作用(日志,门面出口经 detail())各自可测。

    JeeflowError::message

    fn JeeflowError::message(self : JeeflowError) -> String

    JeeflowError::not_equal

    fn JeeflowError::not_equal(x : JeeflowError, y : JeeflowError) -> Bool

    ERR_BUSINESS

    let ERR_BUSINESS : Int64

    INTERNAL_FAILURE_MSG

    let INTERNAL_FAILURE_MSG : String

    内部异常对外只说这一句(issues/137 §3-1 · spec 06 §2.12;逐字=java JeeflowFacade.INTERNAL_FAILURE_MSG,八栈同一串、不许改措辞)。

    attempt

    fn[A, E : Error] attempt(f : () -> A raise E) -> Result[A, E]

    把"会 raise 的调用"物化成 Result(旧 `` 中需要拿 Ok|Err 分支/断言的那一类用这个)。

    迁移口径(moon 0.1.20260920 起 `` 已 deprecated):
    • 只想传播错误 ⇒ 直接调用(外层函数标 raise 即可),不要套本函数;
    • 需要看成功值与失败值两态(断言、回退、转成本域错误)⇒ attempt(fn() { ... })。 本函数存在的意义:让"我要一个 Result"这件事在代码里显式出现,而不是靠 ? 猜。

    Source Files