مدیریت خطا 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 به عمق > 0 نیاز دارد"));
    }

    Ok("Success!".into())
}
  • توابع Rust که «نتیجه» را برمی‌گردانند به exceptionهای سمت ++C ترجمه می‌شوند.
  • این exception به وقوع پیوسته همیشه از نوع rust::Error خواهد بود که در درجه اول راهی برای دریافت string پیام خطا نشان می‌دهد. پیغام خطا از نوع خطایDisplay می‌آید.
  • باز شدن panic از Rust به ++C همیشه باعث می‌شود که فرآیند بلافاصله خاتمه یابد.