FHO Error
類型與 ffx_error
在子工具邊界中,ffx
程式庫將錯誤類型定義為
指出錯誤是否為主要的 ffx
工具
回報是否為錯誤。
在舊版外掛程式系統中,可使用 ffx_error
或
ffx_bail
巨集,表示應直接將錯誤回報給
並標註其他任何詳細資料。任何其他 anyhow
錯誤
會被視為 BUG
,附帶一則警告訊息,指出要查看記錄檔中的位置。
雖然這樣還是有效,而且新的錯誤類型可正確吸收
顯示 anyhow
項錯誤資訊,我們不建議您繼續這麼做
說明這點這樣會令人困惑、不清楚,以及使用者該如何寫字
一些工具還提供了其他常用工具,因此他們常看不到巨集使用的原因
改變他們的看法
將錯誤轉換為 fho::Error
與 anyhow
不同的是,Fho 的錯誤類型不會直接吸收任何錯誤。
請改用 FfxContext
特徵的方法來表示
處理錯誤的方式。
如果您希望系統將錯誤視為使用者錯誤,可以使用 user_message
或 with_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()?;