錯誤處理

#[cxx::bridge]
mod ffi {
    extern "Rust" {
        fn fallible(depth: usize) -> Result<String>;
    }
}

fn fallible(depth: usize) -> anyhow::Result<String> {
    if depth == 0 {
        return Err(anyhow::Error::msg("fallible1 requires depth > 0"));
    }

    Ok("Success!".into())
}
  • 傳回 Result 的 Rust 函式會轉譯為 C++ 端的例外狀況。
  • 擲回的例外狀況一律屬於 rust::Error 類型,這主要用來公開取得錯誤訊息字串的方法。錯誤訊息會來自錯誤類型的 Display 實作項目。
  • 從 Rust 恐慌解開至 C++ 一律會導致程序立即終止。