Factor out the `owning_target` check.

By not interleaving it with code generation, it's much easier to see the logic, and there's less code to boot.

PiperOrigin-RevId: 509517438
diff --git a/rs_bindings_from_cc/ir.rs b/rs_bindings_from_cc/ir.rs
index 21c41e5..9941436 100644
--- a/rs_bindings_from_cc/ir.rs
+++ b/rs_bindings_from_cc/ir.rs
@@ -608,9 +608,24 @@
             Item::Func(func) => func.enclosing_namespace_id,
             Item::Namespace(namespace) => namespace.enclosing_namespace_id,
             Item::TypeAlias(type_alias) => type_alias.enclosing_namespace_id,
-            Item::Comment(_) => None,
-            Item::UnsupportedItem(_) => None,
-            Item::UseMod(_) => None,
+            Item::Comment(..) => None,
+            Item::UnsupportedItem(..) => None,
+            Item::UseMod(..) => None,
+        }
+    }
+
+    /// Returns the target that this should generate source code in.
+    pub fn owning_target(&self) -> Option<&BazelLabel> {
+        match self {
+            Item::Func(..) => None,
+            Item::IncompleteRecord(record) => Some(&record.owning_target),
+            Item::Record(record) => Some(&record.owning_target),
+            Item::Enum(e) => Some(&e.owning_target),
+            Item::TypeAlias(type_alias) => Some(&type_alias.owning_target),
+            Item::UnsupportedItem(..) => None,
+            Item::Comment(..) => None,
+            Item::Namespace(..) => None,
+            Item::UseMod(..) => None,
         }
     }
 }
diff --git a/rs_bindings_from_cc/src_code_gen.rs b/rs_bindings_from_cc/src_code_gen.rs
index 483c4bb..f27a0f2 100644
--- a/rs_bindings_from_cc/src_code_gen.rs
+++ b/rs_bindings_from_cc/src_code_gen.rs
@@ -2680,6 +2680,11 @@
     errors: &mut dyn ErrorReporting,
 ) -> Result<GeneratedItem> {
     let ir = db.ir();
+    if let Some(owning_target) = item.owning_target() {
+        if !ir.is_current_target(owning_target) && !ir.is_stdlib_target(owning_target) {
+            return Ok(GeneratedItem::default());
+        }
+    }
     let overloaded_funcs = db.overloaded_funcs();
     let generated_item = match item {
         Item::Func(func) => match db.generate_func(func.clone()) {
@@ -2703,39 +2708,11 @@
                 }
             }
         },
-        Item::IncompleteRecord(incomplete_record) => {
-            if !ir.is_current_target(&incomplete_record.owning_target)
-                && !ir.is_stdlib_target(&incomplete_record.owning_target)
-            {
-                GeneratedItem::default()
-            } else {
-                generate_incomplete_record(incomplete_record)?
-            }
-        }
-        Item::Record(record) => {
-            if !ir.is_current_target(&record.owning_target)
-                && !ir.is_stdlib_target(&record.owning_target)
-            {
-                GeneratedItem::default()
-            } else {
-                generate_record(db, record, errors)?
-            }
-        }
-        Item::Enum(enum_) => {
-            if !ir.is_current_target(&enum_.owning_target)
-                && !ir.is_stdlib_target(&enum_.owning_target)
-            {
-                GeneratedItem::default()
-            } else {
-                generate_enum(db, enum_)?
-            }
-        }
+        Item::IncompleteRecord(incomplete_record) => generate_incomplete_record(incomplete_record)?,
+        Item::Record(record) => generate_record(db, record, errors)?,
+        Item::Enum(enum_) => generate_enum(db, enum_)?,
         Item::TypeAlias(type_alias) => {
-            if !ir.is_current_target(&type_alias.owning_target)
-                && !ir.is_stdlib_target(&type_alias.owning_target)
-            {
-                GeneratedItem::default()
-            } else if type_alias.enclosing_record_id.is_some() {
+            if type_alias.enclosing_record_id.is_some() {
                 // TODO(b/200067824): support nested type aliases.
                 generate_unsupported(&make_unsupported_nested_type_alias(type_alias)?, errors)?
             } else {