Implement basic support for namespaces

Next steps are:
  * use qualified paths where needed
    * create a single detail module per crate; this requires access to qualified paths.
  * add support for reopened namespaces within the same C++ library
  * add support for reopened namespaces across C++ libraries

PiperOrigin-RevId: 441183150
diff --git a/rs_bindings_from_cc/ir.cc b/rs_bindings_from_cc/ir.cc
index 675d122..064c50a 100644
--- a/rs_bindings_from_cc/ir.cc
+++ b/rs_bindings_from_cc/ir.cc
@@ -456,6 +456,25 @@
   };
 }
 
+llvm::json::Value Namespace::ToJson() const {
+  std::vector<llvm::json::Value> json_item_ids;
+  json_item_ids.reserve(child_item_ids.size());
+  for (const auto& id : child_item_ids) {
+    json_item_ids.push_back(id.value());
+  }
+
+  llvm::json::Object ns{
+      {"name", name},
+      {"id", id},
+      {"owning_target", owning_target},
+      {"child_item_ids", std::move(json_item_ids)},
+  };
+
+  return llvm::json::Object{
+      {"Namespace", std::move(ns)},
+  };
+}
+
 llvm::json::Value IR::ToJson() const {
   std::vector<llvm::json::Value> json_items;
   json_items.reserve(items.size());