Take codegen options by reference
diff --git a/gen/build/src/lib.rs b/gen/build/src/lib.rs
index 14683b6..a4fcc1d 100644
--- a/gen/build/src/lib.rs
+++ b/gen/build/src/lib.rs
@@ -102,13 +102,14 @@
}
fn try_generate_bridge(build: &mut cc::Build, rust_source_file: &Path) -> Result<()> {
- let header = gen::do_generate_header(rust_source_file, Opt::default());
+ let opt = Opt::default();
+ let header = gen::do_generate_header(rust_source_file, &opt);
let header_path = paths::out_with_extension(rust_source_file, ".h")?;
fs::create_dir_all(header_path.parent().unwrap())?;
fs::write(&header_path, header)?;
paths::symlink_header(&header_path, rust_source_file);
- let bridge = gen::do_generate_bridge(rust_source_file, Opt::default());
+ let bridge = gen::do_generate_bridge(rust_source_file, &opt);
let bridge_path = paths::out_with_extension(rust_source_file, ".cc")?;
fs::write(&bridge_path, bridge)?;
build.file(&bridge_path);
diff --git a/gen/cmd/src/main.rs b/gen/cmd/src/main.rs
index 0160913..38aab49 100644
--- a/gen/cmd/src/main.rs
+++ b/gen/cmd/src/main.rs
@@ -35,8 +35,8 @@
};
match (opt.input, opt.header) {
- (Some(input), true) => write(gen::do_generate_header(&input, gen)),
- (Some(input), false) => write(gen::do_generate_bridge(&input, gen)),
+ (Some(input), true) => write(gen::do_generate_header(&input, &gen)),
+ (Some(input), false) => write(gen::do_generate_bridge(&input, &gen)),
(None, true) => write(include::HEADER),
(None, false) => unreachable!(), // enforced by required_unless
}
diff --git a/gen/lib/src/lib.rs b/gen/lib/src/lib.rs
index ca9fabe..d2ac1ca 100644
--- a/gen/lib/src/lib.rs
+++ b/gen/lib/src/lib.rs
@@ -24,7 +24,7 @@
/// 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> {
+pub fn generate_header_and_cc(rust_source: TokenStream, opt: &Opt) -> Result<GeneratedCode, Error> {
let syntax = syn::parse2(rust_source)
.map_err(crate::gen::Error::from)
.map_err(Error)?;
diff --git a/gen/src/mod.rs b/gen/src/mod.rs
index 6573949..0743939 100644
--- a/gen/src/mod.rs
+++ b/gen/src/mod.rs
@@ -32,7 +32,7 @@
/// let mut opt = Opt::default();
/// opt.cxx_impl_annotations = Some(impl_annotations);
/// ```
-#[derive(Default, Clone)]
+#[derive(Default)]
#[non_exhaustive]
pub struct Opt {
/// Any additional headers to #include. The cxxbridge tool does not parse or
@@ -47,17 +47,17 @@
pub cxx_impl_annotations: Option<String>,
}
-pub(super) fn do_generate_bridge(path: &Path, opt: Opt) -> Vec<u8> {
+pub(super) fn do_generate_bridge(path: &Path, opt: &Opt) -> Vec<u8> {
let header = false;
generate_from_path(path, opt, header)
}
-pub(super) fn do_generate_header(path: &Path, opt: Opt) -> Vec<u8> {
+pub(super) fn do_generate_header(path: &Path, opt: &Opt) -> Vec<u8> {
let header = true;
generate_from_path(path, opt, header)
}
-fn generate_from_path(path: &Path, opt: Opt, header: bool) -> Vec<u8> {
+fn generate_from_path(path: &Path, opt: &Opt, header: bool) -> Vec<u8> {
let source = match fs::read_to_string(path) {
Ok(source) => source,
Err(err) => format_err(path, "", Error::Io(err)),
@@ -68,7 +68,7 @@
}
}
-fn generate_from_string(source: &str, opt: Opt, header: bool) -> Result<Vec<u8>> {
+fn generate_from_string(source: &str, opt: &Opt, header: bool) -> Result<Vec<u8>> {
let mut source = source;
if source.starts_with("#!") && !source.starts_with("#![") {
let shebang_end = source.find('\n').unwrap_or(source.len());
@@ -85,7 +85,7 @@
pub(super) fn generate(
syntax: File,
- opt: Opt,
+ opt: &Opt,
gen_header: bool,
gen_cxx: bool,
) -> Result<(Option<Vec<u8>>, Option<Vec<u8>>)> {
@@ -107,7 +107,7 @@
// from the same token stream to avoid parsing twice. But others
// only need to generate one or the other.
let hdr = if gen_header {
- Some(write::gen(namespace, apis, types, opt.clone(), true).content())
+ Some(write::gen(namespace, apis, types, opt, true).content())
} else {
None
};
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 32ccbf6..ccb9f61 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -11,7 +11,7 @@
namespace: &Namespace,
apis: &[Api],
types: &Types,
- opt: Opt,
+ opt: &Opt,
header: bool,
) -> OutFile {
let mut out_file = OutFile::new(namespace.clone(), header);
@@ -21,7 +21,7 @@
writeln!(out.front, "#pragma once");
}
- out.include.extend(opt.include);
+ out.include.extend(opt.include.clone());
for api in apis {
if let Api::Include(include) = api {
out.include.insert(include);