Emit data structures and functions each in source order
diff --git a/gen/src/write.rs b/gen/src/write.rs
index 8a4133c..7753ebf 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -20,8 +20,8 @@
 
     let apis_by_namespace = NamespaceEntries::new(apis);
     write_namespace_forward_declarations(out, &apis_by_namespace);
-    write_namespace_data_structures(out, &apis_by_namespace);
-    write_namespace_functions(out, &apis_by_namespace);
+    write_data_structures(out, apis);
+    write_functions(out, apis);
 
     if !header {
         out.next_section();
@@ -54,12 +54,7 @@
     }
 }
 
-fn write_namespace_data_structures<'a>(
-    out: &mut OutFile<'a>,
-    ns_entries: &'a NamespaceEntries<'a>,
-) {
-    let apis = ns_entries.direct_content();
-
+fn write_data_structures<'a>(out: &mut OutFile<'a>, apis: &'a [Api]) {
     let mut methods_for_type = HashMap::new();
     for api in apis {
         if let Api::RustFunction(efn) = api {
@@ -106,15 +101,9 @@
             }
         }
     }
-
-    for (_, nested_ns_entries) in ns_entries.nested_content() {
-        write_namespace_data_structures(out, nested_ns_entries);
-    }
 }
 
-fn write_namespace_functions<'a>(out: &mut OutFile<'a>, ns_entries: &'a NamespaceEntries<'a>) {
-    let apis = ns_entries.direct_content();
-
+fn write_functions<'a>(out: &mut OutFile<'a>, apis: &'a [Api]) {
     if !out.header {
         for api in apis {
             match api {
@@ -131,10 +120,6 @@
             write_rust_function_shim(out, efn);
         }
     }
-
-    for (_, nested_ns_entries) in ns_entries.nested_content() {
-        write_namespace_functions(out, nested_ns_entries);
-    }
 }
 
 fn pick_includes_and_builtins(out: &mut OutFile) {