Keep type of namespace-iterator in helpers
diff --git a/gen/write.rs b/gen/write.rs
index faf3311..153b5b3 100644
--- a/gen/write.rs
+++ b/gen/write.rs
@@ -978,9 +978,8 @@
 }
 
 fn write_rust_vec_extern(out: &mut OutFile, ty: &Type) {
-    let namespace = out.namespace.iter().cloned().collect::<Vec<String>>();
-    let inner = ty.to_typename(&namespace);
-    let instance = ty.to_mangled(&namespace);
+    let inner = ty.to_typename(&out.namespace);
+    let instance = ty.to_mangled(&out.namespace);
 
     writeln!(out, "#ifndef CXXBRIDGE02_RUST_VEC_{}", instance);
     writeln!(out, "#define CXXBRIDGE02_RUST_VEC_{}", instance);
@@ -1018,9 +1017,8 @@
 }
 
 fn write_rust_vec_impl(out: &mut OutFile, ty: &Type) {
-    let namespace = out.namespace.iter().cloned().collect::<Vec<String>>();
-    let inner = ty.to_typename(&namespace);
-    let instance = ty.to_mangled(&namespace);
+    let inner = ty.to_typename(&out.namespace);
+    let instance = ty.to_mangled(&out.namespace);
 
     writeln!(out, "template <>");
     writeln!(out, "void Vec<{}>::drop() noexcept {{", inner);
@@ -1039,9 +1037,8 @@
 
 fn write_unique_ptr(out: &mut OutFile, ty: &Type, types: &Types) {
     out.include.utility = true;
-    let namespace = out.namespace.iter().cloned().collect::<Vec<String>>();
-    let inner = ty.to_typename(&namespace);
-    let instance = ty.to_mangled(&namespace);
+    let inner = ty.to_typename(&out.namespace);
+    let instance = ty.to_mangled(&out.namespace);
 
     writeln!(out, "#ifndef CXXBRIDGE02_UNIQUE_PTR_{}", instance);
     writeln!(out, "#define CXXBRIDGE02_UNIQUE_PTR_{}", instance);
diff --git a/macro/src/expand.rs b/macro/src/expand.rs
index 9b17b11..d1aa638 100644
--- a/macro/src/expand.rs
+++ b/macro/src/expand.rs
@@ -548,7 +548,7 @@
 
 fn expand_rust_vec(namespace: &Namespace, ty: &Type, ident: &Ident) -> TokenStream {
     let inner = ty;
-    let mangled = ty.to_mangled(&namespace.segments) + "$";
+    let mangled = ty.to_mangled(namespace) + "$";
     let link_prefix = format!("cxxbridge02$rust_vec${}", mangled);
     let link_drop = format!("{}drop", link_prefix);
     let link_len = format!("{}len", link_prefix);
@@ -573,9 +573,9 @@
 }
 
 fn expand_unique_ptr(namespace: &Namespace, ty: &Type, types: &Types) -> TokenStream {
-    let name = ty.to_typename(&namespace.segments);
+    let name = ty.to_typename(namespace);
     let inner = ty;
-    let mangled = ty.to_mangled(&namespace.segments) + "$";
+    let mangled = ty.to_mangled(namespace) + "$";
     let prefix = format!("cxxbridge02$unique_ptr${}", mangled);
     let link_null = format!("{}null", prefix);
     let link_new = format!("{}new", prefix);
@@ -648,7 +648,7 @@
 
 fn expand_vector(namespace: &Namespace, ty: &Type) -> TokenStream {
     let inner = ty;
-    let mangled = ty.to_mangled(&namespace.segments) + "$";
+    let mangled = ty.to_mangled(namespace) + "$";
     let prefix = format!("cxxbridge02$std$vector${}", mangled);
     let link_size = format!("{}size", prefix);
     let link_get_unchecked = format!("{}get_unchecked", prefix);
diff --git a/syntax/mangled.rs b/syntax/mangled.rs
index 2a2fa4c..a89060d 100644
--- a/syntax/mangled.rs
+++ b/syntax/mangled.rs
@@ -1,11 +1,12 @@
+use crate::syntax::namespace::Namespace;
 use crate::syntax::{Atom, Type};
 
 pub trait ToMangled {
-    fn to_mangled(&self, namespace: &Vec<String>) -> String;
+    fn to_mangled(&self, namespace: &Namespace) -> String;
 }
 
 impl ToMangled for Type {
-    fn to_mangled(&self, namespace: &Vec<String>) -> String {
+    fn to_mangled(&self, namespace: &Namespace) -> String {
         match self {
             Type::Ident(ident) => {
                 let mut instance = String::new();
diff --git a/syntax/typename.rs b/syntax/typename.rs
index 016749a..b4261f9 100644
--- a/syntax/typename.rs
+++ b/syntax/typename.rs
@@ -1,11 +1,12 @@
+use crate::syntax::namespace::Namespace;
 use crate::syntax::{Atom, Type};
 
 pub trait ToTypename {
-    fn to_typename(&self, namespace: &Vec<String>) -> String;
+    fn to_typename(&self, namespace: &Namespace) -> String;
 }
 
 impl ToTypename for Type {
-    fn to_typename(&self, namespace: &Vec<String>) -> String {
+    fn to_typename(&self, namespace: &Namespace) -> String {
         match self {
             Type::Ident(ident) => {
                 let mut inner = String::new();