Обробка помилок в 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("Успіх!".into()) }

Speaker Notes

  • Функції Rust, які повертають Result, транслюються у виняткові ситуації на стороні C++.
  • Виняткова ситуація, яку буде згенеровано, завжди матиме тип rust::Error, який, насамперед, надає можливість отримати рядок з повідомленням про помилку. Повідомлення про помилку буде отримано з імплементації Display для типу помилки.
  • Паніка при переході з Rust на C++ завжди призведе до негайного завершення процесу.