Tratamento de Erros do 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 requer profundidade > 0"));
    }

    Ok("Sucesso!".into())
}
  • As funções Rust que retornam Result são traduzidas para exceções no lado C++.
  • A exceção lançada sempre será do tipo rust::Error, que expõe principalmente uma maneira de obter a string da mensagem de erro. A mensagem de erro virá da implementação Display do tipo de erro.
  • Um pânico propagando do Rust para o C++ sempre fará com que o processo