Adjust foreign item parsing to prepare for type aliases
This will be required for parse_extern_type to return a different kind
of Api for the case of type aliases.
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 602a269..b794ba9 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -164,24 +164,16 @@
Ok(lang) => lang,
Err(err) => return cx.push(err),
};
- let api_type = match lang {
- Lang::Cxx => Api::CxxType,
- Lang::Rust => Api::RustType,
- };
- let api_function = match lang {
- Lang::Cxx => Api::CxxFunction,
- Lang::Rust => Api::RustFunction,
- };
let mut items = Vec::new();
for foreign in &foreign_mod.items {
match foreign {
- ForeignItem::Type(foreign) => match parse_extern_type(foreign) {
- Ok(ety) => items.push(api_type(ety)),
+ ForeignItem::Type(foreign) => match parse_extern_type(foreign, lang) {
+ Ok(ety) => items.push(ety),
Err(err) => cx.push(err),
},
ForeignItem::Fn(foreign) => match parse_extern_fn(foreign, lang) {
- Ok(efn) => items.push(api_function(efn)),
+ Ok(efn) => items.push(efn),
Err(err) => cx.push(err),
},
ForeignItem::Macro(foreign) if foreign.mac.path.is_ident("include") => {
@@ -231,18 +223,22 @@
}
}
-fn parse_extern_type(foreign_type: &ForeignItemType) -> Result<ExternType> {
+fn parse_extern_type(foreign_type: &ForeignItemType, lang: Lang) -> Result<Api> {
let doc = attrs::parse_doc(&foreign_type.attrs)?;
let type_token = foreign_type.type_token;
let ident = foreign_type.ident.clone();
- Ok(ExternType {
+ let api_type = match lang {
+ Lang::Cxx => Api::CxxType,
+ Lang::Rust => Api::RustType,
+ };
+ Ok(api_type(ExternType {
doc,
type_token,
ident,
- })
+ }))
}
-fn parse_extern_fn(foreign_fn: &ForeignItemFn, lang: Lang) -> Result<ExternFn> {
+fn parse_extern_fn(foreign_fn: &ForeignItemFn, lang: Lang) -> Result<Api> {
let generics = &foreign_fn.sig.generics;
if !generics.params.is_empty() || generics.where_clause.is_some() {
return Err(Error::new_spanned(
@@ -318,8 +314,12 @@
let ident = foreign_fn.sig.ident.clone();
let paren_token = foreign_fn.sig.paren_token;
let semi_token = foreign_fn.semi_token;
+ let api_function = match lang {
+ Lang::Cxx => Api::CxxFunction,
+ Lang::Rust => Api::RustFunction,
+ };
- Ok(ExternFn {
+ Ok(api_function(ExternFn {
lang,
doc,
ident,
@@ -333,7 +333,7 @@
throws_tokens,
},
semi_token,
- })
+ }))
}
fn parse_type(ty: &RustType) -> Result<Type> {