Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Обработка ошибок Rust

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[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())
}
  • Функции Rust, которые возвращают Result, на стороне C++ превращаются в исключения.
  • Выбрасываемое исключение всегда имеет тип rust::Error, который в первую очередь предоставляет способ получить строку сообщения об ошибке. Сообщение берётся из реализации Display типа ошибки.
  • Паника, раскручивающаяся из Rust в C++, всегда приводит к немедленному завершению процесса.