blob: de76d808fe2b1b16a435f82cd44822af99f11a12 [file] [log] [blame]
//! The CXX code generator for constructing and compiling C++ code.
//!
//! This is intended to be embedded into higher-level code generators.
mod gen;
mod syntax;
use crate::gen::Opt;
use proc_macro2::TokenStream;
pub use crate::gen::{Error, GeneratedCode, Result};
/// Generate C++ bindings code from a Rust token stream. This should be a Rust
/// token stream which somewhere contains a `#[cxx::bridge] mod {}`.
pub fn generate_header_and_cc(rust_source: TokenStream) -> Result<GeneratedCode> {
gen::do_generate_from_tokens(rust_source, Opt::default())
}
#[cfg(test)]
mod test {
use quote::quote;
#[test]
fn test_positive() {
let rs = quote! {
#[cxx::bridge]
mod ffi {
extern "C" {
fn in_C();
}
extern "Rust" {
fn in_rs();
}
}
};
let code = crate::generate_header_and_cc(rs).unwrap();
assert!(code.cxx.len() > 0);
assert!(code.header.len() > 0);
}
#[test]
fn test_negative() {
let rs = quote! {};
assert!(crate::generate_header_and_cc(rs).is_err())
}
}