blob: 3b1b3c66b9960f854555135188435ae041c0d9e8 [file] [log] [blame]
//! The CXX code generator for constructing and compiling C++ code.
//!
//! This is intended to be embedded into higher-level code generators.
#![allow(dead_code)]
mod gen;
mod syntax;
pub use crate::gen::{Error, Opt};
use proc_macro2::TokenStream;
/// Results of code generation.
pub struct GeneratedCode {
/// The bytes of a C++ header file.
pub header: Vec<u8>,
/// The bytes of a C++ implementation file (e.g. .cc, cpp etc.)
pub cxx: Vec<u8>,
}
/// 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, opt: Opt) -> Result<GeneratedCode, Error> {
let syntax = syn::parse2(rust_source)?;
match gen::generate(syntax, opt, true, true) {
Ok((Some(header), Some(cxx))) => Ok(GeneratedCode { header, cxx }),
Err(err) => Err(err),
_ => panic!("Unexpected generation"),
}
}