#[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 به عمق > 0 نیاز دارد"));
}
Ok("Success!".into())
}
توابع Rust که «نتیجه» را برمیگردانند به exceptionهای سمت ++C ترجمه میشوند.
این exception به وقوع پیوسته همیشه از نوع rust::Error خواهد بود که در درجه اول راهی برای دریافت string پیام خطا نشان میدهد. پیغام خطا از نوع خطایDisplay میآید.
باز شدن panic از Rust به ++C همیشه باعث میشود که فرآیند بلافاصله خاتمه یابد.