dtolnay/cxx

Preserve cause-chain of errors propagated from rust -> c++ -> rust

Ouverte

#290 ouverte le 9 sept. 2020

 (1 commentaire) (0 réaction) (0 personne assignée)Rust (253 forks)batch import
help wantedneeds design

Métriques du dépôt

Stars
 (4 472 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

use anyhow::{anyhow, Result};

#[cxx::bridge]
mod ffi {
    extern "C" {
        include!("repro.h");
        fn cthing() -> Result<()>;
    }

    extern "Rust" {
        fn rustthing() -> Result<()>;
    }
}

fn rustthing() -> Result<()> {
    Err(anyhow!("no such file or directory").context("failed to open: /nonexist"))
}

fn main() -> Result<()> {
    ffi::cthing()?;
    Ok(())
}
// repro.cc

void cthing() {
  rustthing();
}

This currently loses the cause chain and only prints:

Error: failed to open: /nonexist

Guide contributeur