133d722a9Sopenharmony_ci//! The CXX code generator for constructing and compiling C++ code. 233d722a9Sopenharmony_ci//! 333d722a9Sopenharmony_ci//! This is intended as a mechanism for embedding the `cxx` crate into 433d722a9Sopenharmony_ci//! higher-level code generators. See [dtolnay/cxx#235] and 533d722a9Sopenharmony_ci//! [https://github.com/google/autocxx]. 633d722a9Sopenharmony_ci//! 733d722a9Sopenharmony_ci//! [dtolnay/cxx#235]: https://github.com/dtolnay/cxx/issues/235 833d722a9Sopenharmony_ci//! [https://github.com/google/autocxx]: https://github.com/google/autocxx 933d722a9Sopenharmony_ci 1033d722a9Sopenharmony_ci#![doc(html_root_url = "https://docs.rs/cxx-gen/0.7.97")] 1133d722a9Sopenharmony_ci#![deny(missing_docs)] 1233d722a9Sopenharmony_ci#![allow(dead_code)] 1333d722a9Sopenharmony_ci#![allow( 1433d722a9Sopenharmony_ci clippy::cast_sign_loss, 1533d722a9Sopenharmony_ci clippy::default_trait_access, 1633d722a9Sopenharmony_ci clippy::derive_partial_eq_without_eq, 1733d722a9Sopenharmony_ci clippy::enum_glob_use, 1833d722a9Sopenharmony_ci clippy::if_same_then_else, 1933d722a9Sopenharmony_ci clippy::inherent_to_string, 2033d722a9Sopenharmony_ci clippy::items_after_statements, 2133d722a9Sopenharmony_ci clippy::match_bool, 2233d722a9Sopenharmony_ci clippy::match_on_vec_items, 2333d722a9Sopenharmony_ci clippy::match_same_arms, 2433d722a9Sopenharmony_ci clippy::missing_errors_doc, 2533d722a9Sopenharmony_ci clippy::module_name_repetitions, 2633d722a9Sopenharmony_ci clippy::needless_pass_by_value, 2733d722a9Sopenharmony_ci clippy::new_without_default, 2833d722a9Sopenharmony_ci clippy::nonminimal_bool, 2933d722a9Sopenharmony_ci clippy::option_if_let_else, 3033d722a9Sopenharmony_ci clippy::or_fun_call, 3133d722a9Sopenharmony_ci clippy::redundant_else, 3233d722a9Sopenharmony_ci clippy::shadow_unrelated, 3333d722a9Sopenharmony_ci clippy::similar_names, 3433d722a9Sopenharmony_ci clippy::single_match_else, 3533d722a9Sopenharmony_ci clippy::struct_excessive_bools, 3633d722a9Sopenharmony_ci clippy::too_many_arguments, 3733d722a9Sopenharmony_ci clippy::too_many_lines, 3833d722a9Sopenharmony_ci clippy::toplevel_ref_arg, 3933d722a9Sopenharmony_ci // clippy bug: https://github.com/rust-lang/rust-clippy/issues/6983 4033d722a9Sopenharmony_ci clippy::wrong_self_convention 4133d722a9Sopenharmony_ci)] 4233d722a9Sopenharmony_ci 4333d722a9Sopenharmony_cimod error; 4433d722a9Sopenharmony_cimod gen; 4533d722a9Sopenharmony_cimod syntax; 4633d722a9Sopenharmony_ci 4733d722a9Sopenharmony_cipub use crate::error::Error; 4833d722a9Sopenharmony_cipub use crate::gen::include::{Include, HEADER}; 4933d722a9Sopenharmony_cipub use crate::gen::{GeneratedCode, Opt}; 5033d722a9Sopenharmony_cipub use crate::syntax::IncludeKind; 5133d722a9Sopenharmony_ciuse proc_macro2::TokenStream; 5233d722a9Sopenharmony_ci 5333d722a9Sopenharmony_ci/// Generate C++ bindings code from a Rust token stream. This should be a Rust 5433d722a9Sopenharmony_ci/// token stream which somewhere contains a `#[cxx::bridge] mod {}`. 5533d722a9Sopenharmony_cipub fn generate_header_and_cc(rust_source: TokenStream, opt: &Opt) -> Result<GeneratedCode, Error> { 5633d722a9Sopenharmony_ci let syntax = syn::parse2(rust_source) 5733d722a9Sopenharmony_ci .map_err(crate::gen::Error::from) 5833d722a9Sopenharmony_ci .map_err(Error::from)?; 5933d722a9Sopenharmony_ci gen::generate(syntax, opt).map_err(Error::from) 6033d722a9Sopenharmony_ci} 61