Rustのエラー処理
#[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++ にパニック アンワインドを行うと、プロセスは必ず直ちに終了します。