Move include information of builtins to builtin.rs
diff --git a/gen/src/builtin.rs b/gen/src/builtin.rs
index 36e32f8..ab2b465 100644
--- a/gen/src/builtin.rs
+++ b/gen/src/builtin.rs
@@ -41,6 +41,38 @@
     let builtin = &mut out.builtin;
     let out = &mut builtin.content;
 
+    if builtin.rust_string {
+        include.array = true;
+        include.cstdint = true;
+        include.string = true;
+    }
+
+    if builtin.rust_str {
+        include.cstdint = true;
+        include.string = true;
+    }
+
+    if builtin.rust_box {
+        include.new = true;
+        include.type_traits = true;
+    }
+
+    if builtin.rust_vec {
+        include.array = true;
+        include.new = true;
+        include.type_traits = true;
+        builtin.panic = true;
+        builtin.unsafe_bitcopy = true;
+    }
+
+    if builtin.rust_error {
+        include.exception = true;
+    }
+
+    if builtin.rust_isize {
+        include.basetsd = true;
+    }
+
     out.begin_block(Block::Namespace("rust"));
     out.begin_block(Block::InlineNamespace("cxxbridge05"));
     writeln!(out, "// #include \"rust/cxx.h\"");
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 8688797..2c3234c 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -144,45 +144,18 @@
                 Some(U8) | Some(U16) | Some(U32) | Some(U64) | Some(I8) | Some(I16) | Some(I32)
                 | Some(I64) => out.include.cstdint = true,
                 Some(Usize) => out.include.cstddef = true,
-                Some(Isize) => {
-                    out.include.basetsd = true;
-                    out.builtin.rust_isize = true;
-                }
+                Some(Isize) => out.builtin.rust_isize = true,
                 Some(CxxString) => out.include.string = true,
-                Some(RustString) => {
-                    out.include.array = true;
-                    out.include.cstdint = true;
-                    out.include.string = true;
-                    out.builtin.rust_string = true;
-                }
+                Some(RustString) => out.builtin.rust_string = true,
                 Some(Bool) | Some(F32) | Some(F64) | None => {}
             },
-            Type::RustBox(_) => {
-                out.include.new = true;
-                out.include.type_traits = true;
-                out.builtin.rust_box = true;
-            }
-            Type::RustVec(_) => {
-                out.include.array = true;
-                out.include.new = true;
-                out.include.type_traits = true;
-                out.builtin.panic = true;
-                out.builtin.rust_vec = true;
-                out.builtin.unsafe_bitcopy = true;
-            }
+            Type::RustBox(_) => out.builtin.rust_box = true,
+            Type::RustVec(_) => out.builtin.rust_vec = true,
             Type::UniquePtr(_) => out.include.memory = true,
-            Type::Str(_) => {
-                out.include.cstdint = true;
-                out.include.string = true;
-                out.builtin.rust_str = true;
-            }
+            Type::Str(_) => out.builtin.rust_str = true,
             Type::CxxVector(_) => out.include.vector = true,
-            Type::Fn(_) => {
-                out.builtin.rust_fn = true;
-            }
-            Type::Slice(_) => {
-                out.builtin.rust_slice = true;
-            }
+            Type::Fn(_) => out.builtin.rust_fn = true,
+            Type::Slice(_) => out.builtin.rust_slice = true,
             Type::SliceRefU8(_) => {
                 out.include.cstdint = true;
                 out.builtin.rust_slice = true;
@@ -750,7 +723,6 @@
     }
     writeln!(out, ";");
     if sig.throws {
-        out.include.exception = true;
         out.builtin.rust_error = true;
         writeln!(out, "  if (error$.ptr) {{");
         writeln!(out, "    throw ::rust::impl<::rust::Error>::error(error$);");