Обробка помилок в 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())
}
  • Функції Rust, які повертають Result, транслюються у виняткові ситуації на стороні C++.
  • Виняткова ситуація, яку буде згенеровано, завжди матиме тип rust::Error, який, насамперед, надає можливість отримати рядок з повідомленням про помилку. Повідомлення про помилку буде отримано з імплементації Display для типу помилки.
  • Паніка при переході з Rust на C++ завжди призведе до негайного завершення процесу.