blob: 26b6ef6b5bd685d22cc7696527d04b88b564b30b [file] [log] [blame]
mod gen;
mod syntax;
use gen::include;
use std::io::{self, Write};
use std::path::PathBuf;
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
#[structopt(
name = "cxxbridge",
author,
about = "https://github.com/dtolnay/cxx",
usage = "\
cxxbridge <input>.rs Emit .cc file for bridge to stdout
cxxbridge <input>.rs --header Emit .h file for bridge to stdout
cxxbridge --header Emit cxxbridge.h header to stdout",
help_message = "Print help information",
version_message = "Print version information"
)]
struct Opt {
/// Input Rust source file containing #[cxx::bridge]
#[structopt(parse(from_os_str), required_unless = "header")]
input: Option<PathBuf>,
/// Emit header with declarations only
#[structopt(long)]
header: bool,
}
fn write(content: impl AsRef<[u8]>) {
let _ = io::stdout().lock().write_all(content.as_ref());
}
fn main() {
let opt = Opt::from_args();
match (opt.input, opt.header) {
(Some(input), true) => write(gen::do_generate_header(&input)),
(Some(input), false) => write(gen::do_generate_bridge(&input)),
(None, true) => write(include::HEADER),
(None, false) => unreachable!(), // enforced by required_unless
}
}