Move finding of bridge mod to its own module
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()
- }
-}