Consistently use &Namespace in parser function signatures
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 2136653..aa1eef6 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -30,11 +30,11 @@
let mut apis = Vec::new();
for item in items {
match item {
- Item::Struct(item) => match parse_struct(cx, item, namespace.clone()) {
+ Item::Struct(item) => match parse_struct(cx, item, namespace) {
Ok(strct) => apis.push(strct),
Err(err) => cx.push(err),
},
- Item::Enum(item) => match parse_enum(cx, item, namespace.clone()) {
+ Item::Enum(item) => match parse_enum(cx, item, namespace) {
Ok(enm) => apis.push(enm),
Err(err) => cx.push(err),
},
@@ -52,7 +52,7 @@
apis
}
-fn parse_struct(cx: &mut Errors, item: ItemStruct, mut namespace: Namespace) -> Result<Api> {
+fn parse_struct(cx: &mut Errors, item: ItemStruct, namespace: &Namespace) -> Result<Api> {
let generics = &item.generics;
if !generics.params.is_empty() || generics.where_clause.is_some() {
let struct_token = item.struct_token;
@@ -67,6 +67,7 @@
let mut doc = Doc::new();
let mut derives = Vec::new();
+ let mut namespace = namespace.clone();
attrs::parse(
cx,
&item.attrs,
@@ -78,7 +79,7 @@
},
);
- let fields = match item.fields {
+ let named_fields = match item.fields {
Fields::Named(fields) => fields,
Fields::Unit => return Err(Error::new_spanned(item, "unit structs are not supported")),
Fields::Unnamed(_) => {
@@ -86,26 +87,28 @@
}
};
+ let fields = named_fields
+ .named
+ .into_iter()
+ .map(|field| {
+ Ok(Var {
+ ident: field.ident.unwrap(),
+ ty: parse_type(&field.ty, &namespace)?,
+ })
+ })
+ .collect::<Result<_>>()?;
+
Ok(Api::Struct(Struct {
doc,
derives,
struct_token: item.struct_token,
- name: Pair::new(namespace.clone(), item.ident),
- brace_token: fields.brace_token,
- fields: fields
- .named
- .into_iter()
- .map(|field| {
- Ok(Var {
- ident: field.ident.unwrap(),
- ty: parse_type(&field.ty, &namespace)?,
- })
- })
- .collect::<Result<_>>()?,
+ name: Pair::new(namespace, item.ident),
+ brace_token: named_fields.brace_token,
+ fields,
}))
}
-fn parse_enum(cx: &mut Errors, item: ItemEnum, mut namespace: Namespace) -> Result<Api> {
+fn parse_enum(cx: &mut Errors, item: ItemEnum, namespace: &Namespace) -> Result<Api> {
let generics = &item.generics;
if !generics.params.is_empty() || generics.where_clause.is_some() {
let enum_token = item.enum_token;
@@ -120,6 +123,7 @@
let mut doc = Doc::new();
let mut repr = None;
+ let mut namespace = namespace.clone();
attrs::parse(
cx,
&item.attrs,
@@ -214,13 +218,12 @@
for foreign in &foreign_mod.items {
match foreign {
ForeignItem::Type(foreign) => {
- match parse_extern_type(cx, foreign, lang, trusted, namespace.clone()) {
+ match parse_extern_type(cx, foreign, lang, trusted, namespace) {
Ok(ety) => items.push(ety),
Err(err) => cx.push(err),
}
}
- ForeignItem::Fn(foreign) => match parse_extern_fn(cx, foreign, lang, namespace.clone())
- {
+ ForeignItem::Fn(foreign) => match parse_extern_fn(cx, foreign, lang, namespace) {
Ok(efn) => items.push(efn),
Err(err) => cx.push(err),
},
@@ -231,7 +234,7 @@
}
}
ForeignItem::Verbatim(tokens) => {
- match parse_extern_verbatim(cx, tokens, lang, namespace.clone()) {
+ match parse_extern_verbatim(cx, tokens, lang, namespace) {
Ok(api) => items.push(api),
Err(err) => cx.push(err),
}
@@ -283,9 +286,10 @@
foreign_type: &ForeignItemType,
lang: Lang,
trusted: bool,
- mut namespace: Namespace,
+ namespace: &Namespace,
) -> Result<Api> {
let mut doc = Doc::new();
+ let mut namespace = namespace.clone();
attrs::parse(
cx,
&foreign_type.attrs,
@@ -315,7 +319,7 @@
cx: &mut Errors,
foreign_fn: &ForeignItemFn,
lang: Lang,
- mut namespace: Namespace,
+ namespace: &Namespace,
) -> Result<Api> {
let generics = &foreign_fn.sig.generics;
if !generics.params.is_empty() || generics.where_clause.is_some() {
@@ -334,6 +338,7 @@
let mut doc = Doc::new();
let mut cxx_name = None;
let mut rust_name = None;
+ let mut namespace = namespace.clone();
attrs::parse(
cx,
&foreign_fn.attrs,
@@ -438,7 +443,7 @@
cx: &mut Errors,
tokens: &TokenStream,
lang: Lang,
- mut namespace: Namespace,
+ namespace: &Namespace,
) -> Result<Api> {
// type Alias = crate::path::to::Type;
let parse = |input: ParseStream| -> Result<TypeAlias> {
@@ -455,6 +460,7 @@
let ty: RustType = input.parse()?;
let semi_token: Token![;] = input.parse()?;
let mut doc = Doc::new();
+ let mut namespace = namespace.clone();
attrs::parse(
cx,
&attrs,