Move finding of bridge mod to its own module
diff --git a/gen/src/find.rs b/gen/src/find.rs
new file mode 100644
index 0000000..dc83431
--- /dev/null
+++ b/gen/src/find.rs
@@ -0,0 +1,36 @@
+use crate::gen::{Error, Input, Result};
+use crate::syntax::namespace::Namespace;
+use quote::quote;
+use syn::{Attribute, File, Item};
+
+pub(super) fn find_bridge_mod(syntax: File) -> Result<Input> {
+ for item in syntax.items {
+ if let Item::Mod(item) = item {
+ for attr in &item.attrs {
+ let path = &attr.path;
+ if quote!(#path).to_string() == "cxx :: bridge" {
+ let module = match item.content {
+ Some(module) => module.1,
+ None => {
+ return Err(Error::Syn(syn::Error::new_spanned(
+ item,
+ Error::OutOfLineMod,
+ )));
+ }
+ };
+ let namespace = parse_args(attr)?;
+ return Ok(Input { namespace, module });
+ }
+ }
+ }
+ }
+ Err(Error::NoBridgeMod)
+}
+
+fn parse_args(attr: &Attribute) -> syn::Result<Namespace> {
+ if attr.tokens.is_empty() {
+ Ok(Namespace::none())
+ } else {
+ attr.parse_args()
+ }
+}
diff --git a/gen/src/mod.rs b/gen/src/mod.rs
index 6663e4b..fa69cb5 100644
--- a/gen/src/mod.rs
+++ b/gen/src/mod.rs
@@ -2,6 +2,7 @@
// the cmd.
mod error;
+mod find;
pub(super) mod include;
pub(super) mod out;
mod write;
@@ -10,10 +11,9 @@
use crate::syntax::namespace::Namespace;
use crate::syntax::report::Errors;
use crate::syntax::{self, check, Types};
-use quote::quote;
use std::fs;
use std::path::Path;
-use syn::{Attribute, File, Item};
+use syn::Item;
struct Input {
namespace: Namespace,
@@ -45,7 +45,7 @@
proc_macro2::fallback::force();
let ref mut errors = Errors::new();
let syntax = syn::parse_file(&source)?;
- let bridge = find_bridge_mod(syntax)?;
+ let bridge = find::find_bridge_mod(syntax)?;
let ref namespace = bridge.namespace;
let ref apis = syntax::parse_items(errors, bridge.module);
let ref types = Types::collect(errors, apis);
@@ -59,35 +59,3 @@
Err(err) => format_err(path, &source, err),
}
}
-
-fn find_bridge_mod(syntax: File) -> Result<Input> {
- for item in syntax.items {
- if let Item::Mod(item) = item {
- for attr in &item.attrs {
- let path = &attr.path;
- if quote!(#path).to_string() == "cxx :: bridge" {
- let module = match item.content {
- Some(module) => module.1,
- None => {
- return Err(Error::Syn(syn::Error::new_spanned(
- item,
- Error::OutOfLineMod,
- )));
- }
- };
- let namespace = parse_args(attr)?;
- return Ok(Input { namespace, module });
- }
- }
- }
- }
- Err(Error::NoBridgeMod)
-}
-
-fn parse_args(attr: &Attribute) -> syn::Result<Namespace> {
- if attr.tokens.is_empty() {
- Ok(Namespace::none())
- } else {
- attr.parse_args()
- }
-}