Refactoring: Consolidate handling of various ADT snippets.

PiperOrigin-RevId: 546291074
Change-Id: I74abff51df5393f599c4d93ab9e630dc59411073
diff --git a/cc_bindings_from_rs/bindings.rs b/cc_bindings_from_rs/bindings.rs
index f3994e5..eff7156 100644
--- a/cc_bindings_from_rs/bindings.rs
+++ b/cc_bindings_from_rs/bindings.rs
@@ -1796,11 +1796,7 @@
     // `format_adt` should only be called for local ADTs.
     let local_def_id = core.def_id.expect_local();
 
-    let ApiSnippets {
-        main_api: default_ctor_main_api,
-        cc_details: default_ctor_cc_details,
-        rs_details: default_ctor_rs_details,
-    } = format_default_ctor(input, core).unwrap_or_else(|err| {
+    let default_ctor_snippets = format_default_ctor(input, core).unwrap_or_else(|err| {
         let msg = format!("{err:#}");
         ApiSnippets {
             main_api: CcSnippet::new(quote! {
@@ -1811,11 +1807,7 @@
         }
     });
 
-    let ApiSnippets {
-        main_api: destructor_and_move_main_api,
-        cc_details: destructor_and_move_cc_details,
-        rs_details: destructor_and_move_rs_details,
-    } = {
+    let destructor_and_move_snippets = {
         assert!(!self_ty.needs_drop(tcx, tcx.param_env(core.def_id)));
         ApiSnippets {
             main_api: CcSnippet::new(quote! {
@@ -1857,33 +1849,20 @@
         }
     };
 
-    let ApiSnippets {
-        main_api: copy_ctor_and_assignment_main_api,
-        cc_details: copy_ctor_and_assignment_cc_details,
-        rs_details: copy_ctor_and_assignment_rs_details,
-    } = format_copy_ctor_and_assignment_operator(input, core).unwrap_or_else(|err| {
-        let msg = format!("{err:#}");
-        ApiSnippets {
-            main_api: CcSnippet::new(quote! {
-                __NEWLINE__ __COMMENT__ #msg
-                #adt_cc_name(const #adt_cc_name&) = delete;  __NEWLINE__
-                #adt_cc_name& operator=(const #adt_cc_name&) = delete;
-            }),
-            ..Default::default()
-        }
-    });
+    let copy_ctor_and_assignment_snippets = format_copy_ctor_and_assignment_operator(input, core)
+        .unwrap_or_else(|err| {
+            let msg = format!("{err:#}");
+            ApiSnippets {
+                main_api: CcSnippet::new(quote! {
+                    __NEWLINE__ __COMMENT__ #msg
+                    #adt_cc_name(const #adt_cc_name&) = delete;  __NEWLINE__
+                    #adt_cc_name& operator=(const #adt_cc_name&) = delete;
+                }),
+                ..Default::default()
+            }
+        });
 
-    let ApiSnippets {
-        main_api: fields_main_api,
-        cc_details: fields_cc_details,
-        rs_details: fields_rs_details,
-    } = format_fields(input, core);
-
-    let ApiSnippets {
-        main_api: impl_items_main_api,
-        cc_details: impl_items_cc_details,
-        rs_details: impl_items_rs_details,
-    } = tcx
+    let impl_items_snippets = tcx
         .inherent_impls(core.def_id)
         .iter()
         .map(|impl_id| tcx.hir().expect_item(impl_id.expect_local()))
@@ -1908,6 +1887,25 @@
         })
         .collect();
 
+    let ApiSnippets {
+        main_api: public_functions_main_api,
+        cc_details: public_functions_cc_details,
+        rs_details: public_functions_rs_details,
+    } = [
+        default_ctor_snippets,
+        destructor_and_move_snippets,
+        copy_ctor_and_assignment_snippets,
+        impl_items_snippets,
+    ]
+    .into_iter()
+    .collect();
+
+    let ApiSnippets {
+        main_api: fields_main_api,
+        cc_details: fields_cc_details,
+        rs_details: fields_rs_details,
+    } = format_fields(input, core);
+
     let alignment = Literal::u64_unsuffixed(core.alignment_in_bytes);
     let size = Literal::u64_unsuffixed(core.size_in_bytes);
     let main_api = {
@@ -1927,15 +1925,7 @@
 
         let mut prereqs = CcPrerequisites::default();
         prereqs.includes.insert(input.support_header("internal/attribute_macros.h"));
-        let default_ctor_main_api = default_ctor_main_api.into_tokens(&mut prereqs);
-        let destructor_and_move_main_api = destructor_and_move_main_api.into_tokens(&mut prereqs);
-        let copy_ctor_and_assignment_main_api =
-            copy_ctor_and_assignment_main_api.into_tokens(&mut prereqs);
-        let impl_items_main_api = if impl_items_main_api.tokens.is_empty() {
-            quote! {}
-        } else {
-            impl_items_main_api.into_tokens(&mut prereqs)
-        };
+        let public_functions_main_api = public_functions_main_api.into_tokens(&mut prereqs);
         let fields_main_api = fields_main_api.into_tokens(&mut prereqs);
         prereqs.fwd_decls.remove(&local_def_id);
 
@@ -1945,10 +1935,7 @@
                 __NEWLINE__ #doc_comment
                 #keyword #(#attributes)* #adt_cc_name final {
                     public: __NEWLINE__
-                        #default_ctor_main_api
-                        #destructor_and_move_main_api
-                        #copy_ctor_and_assignment_main_api
-                        #impl_items_main_api
+                        #public_functions_main_api
                     #fields_main_api
                 };
                 __NEWLINE__
@@ -1957,12 +1944,7 @@
     };
     let cc_details = {
         let mut prereqs = CcPrerequisites::default();
-        let default_ctor_cc_details = default_ctor_cc_details.into_tokens(&mut prereqs);
-        let destructor_and_move_cc_details =
-            destructor_and_move_cc_details.into_tokens(&mut prereqs);
-        let copy_ctor_and_assignment_cc_details =
-            copy_ctor_and_assignment_cc_details.into_tokens(&mut prereqs);
-        let impl_items_cc_details = impl_items_cc_details.into_tokens(&mut prereqs);
+        let public_functions_cc_details = public_functions_cc_details.into_tokens(&mut prereqs);
         let fields_cc_details = fields_cc_details.into_tokens(&mut prereqs);
         prereqs.defs.insert(local_def_id);
         prereqs.includes.insert(CcInclude::type_traits());
@@ -1979,10 +1961,7 @@
                 static_assert(std::is_trivially_move_constructible_v<#adt_cc_name>);
                 static_assert(std::is_trivially_move_assignable_v<#adt_cc_name>);
                 __NEWLINE__
-                #default_ctor_cc_details
-                #destructor_and_move_cc_details
-                #copy_ctor_and_assignment_cc_details
-                #impl_items_cc_details
+                #public_functions_cc_details
                 #fields_cc_details
             },
         }
@@ -1992,10 +1971,7 @@
         quote! {
             const _: () = assert!(::std::mem::size_of::<#adt_rs_name>() == #size);
             const _: () = assert!(::std::mem::align_of::<#adt_rs_name>() == #alignment);
-            #default_ctor_rs_details
-            #destructor_and_move_rs_details
-            #copy_ctor_and_assignment_rs_details
-            #impl_items_rs_details
+            #public_functions_rs_details
             #fields_rs_details
         }
     };