dtolnay/cxx

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

Open

#290 opened on 2020年9月9日

GitHub で見る
 (1 comment) (0 reactions) (0 assignees)Rust (4,472 stars) (253 forks)batch import
help wantedneeds design

説明

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

コントリビューターガイド