FFX 子工具中的錯誤

FHO Error 類型與 ffx_error

在子工具邊界中,ffx 程式庫將錯誤類型定義為 指出錯誤是否為主要的 ffx 工具 回報是否為錯誤。

在舊版外掛程式系統中,可使用 ffx_errorffx_bail 巨集,表示應直接將錯誤回報給 並標註其他任何詳細資料。任何其他 anyhow 錯誤 會被視為 BUG,附帶一則警告訊息,指出要查看記錄檔中的位置。

雖然這樣還是有效,而且新的錯誤類型可正確吸收 顯示 anyhow 項錯誤資訊,我們不建議您繼續這麼做 說明這點這樣會令人困惑、不清楚,以及使用者該如何寫字 一些工具還提供了其他常用工具,因此他們常看不到巨集使用的原因 改變他們的看法

將錯誤轉換為 fho::Error

anyhow 不同的是,Fho 的錯誤類型不會直接吸收任何錯誤。 請改用 FfxContext 特徵的方法來表示 處理錯誤的方式。

如果您希望系統將錯誤視為使用者錯誤,可以使用 user_messagewith_user_message,加入使用者可看見的結構定義 (保留時 錯誤鏈結:

process(filename).with_user_message(|| format!("Failed to process {filename}"))?;

相反地,你應該視為錯誤,因為該錯誤並不真的 因此使用者也不太可能採取任何簡單的行動來解決問題 它:

do_thing().bug()?;

這樣才能在發生錯誤時,確實掌握錯誤呈現方式 使用者。

使用錯誤類型的時機

對這種錯誤類型並不需要或非常有意願 整個程式碼集您可能會繼續使用 最好在程式庫程式碼和較低層級的部分中使用 anyhow,或是 thiserror 工具。接著,您可以將這些錯誤轉譯成與 ffx 相容的錯誤。

在程式庫程式碼的周圍放置邊界 由您決定要如何呈現錯誤建議各位把所有內容 包括與使用者互動的淺層程式碼 幫助您做出更明智的決策

這個流程的絕佳範例:

let stuff = get_user_input().user_message("Your input made no sense!")?;
stuff.act_on_it().bug()?;