Parse cxx_name/rust_name attrs on all syntax tree nodes holding Pair
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 20f79ec..9c766ff 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -58,6 +58,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &item.attrs,
@@ -65,6 +67,8 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
@@ -103,7 +107,7 @@
     }
 
     let struct_token = item.struct_token;
-    let name = Pair::new(namespace, item.ident.clone(), item.ident);
+    let name = pair(namespace, &item.ident, cxx_name, rust_name);
     let brace_token = named_fields.brace_token;
 
     Ok(Api::Struct(Struct {
@@ -121,6 +125,8 @@
     let mut derives = Vec::new();
     let mut repr = None;
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &item.attrs,
@@ -129,6 +135,8 @@
             derives: Some(&mut derives),
             repr: Some(&mut repr),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
@@ -189,7 +197,7 @@
         }
     }
 
-    let name = Pair::new(namespace, item.ident.clone(), item.ident);
+    let name = pair(namespace, &item.ident, cxx_name, rust_name);
     let repr_ident = Ident::new(repr.as_ref(), Span::call_site());
     let repr_type = Type::Ident(RustName::new(repr_ident));
 
@@ -335,6 +343,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &foreign_type.attrs,
@@ -342,13 +352,14 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
 
     let type_token = foreign_type.type_token;
-    let ident = foreign_type.ident.clone();
-    let name = Pair::new(namespace, ident.clone(), ident);
+    let name = pair(namespace, &foreign_type.ident, cxx_name, rust_name);
     let colon_token = None;
     let bounds = Vec::new();
     let semi_token = foreign_type.semi_token;
@@ -574,6 +585,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &attrs,
@@ -581,6 +594,8 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
@@ -591,7 +606,7 @@
         return Err(Error::new_spanned(span, msg));
     }
 
-    let name = Pair::new(namespace, ident.clone(), ident);
+    let name = pair(namespace, &ident, cxx_name, rust_name);
 
     Ok(Api::TypeAlias(TypeAlias {
         doc,
@@ -648,6 +663,8 @@
     let mut doc = Doc::new();
     let mut derives = Vec::new();
     let mut namespace = namespace.clone();
+    let mut cxx_name = None;
+    let mut rust_name = None;
     attrs::parse(
         cx,
         &attrs,
@@ -655,11 +672,13 @@
             doc: Some(&mut doc),
             derives: Some(&mut derives),
             namespace: Some(&mut namespace),
+            cxx_name: Some(&mut cxx_name),
+            rust_name: Some(&mut rust_name),
             ..Default::default()
         },
     );
 
-    let name = Pair::new(namespace, ident.clone(), ident);
+    let name = pair(namespace, &ident, cxx_name, rust_name);
     let colon_token = Some(colon_token);
 
     Ok(match lang {