Add the namespace hierarchy to BindingsAndMetadata

This cl also adds a --namespaces_json flag to Crubit for writing a .json file with the namespace contents. Bazel support for it will be provided in a followup cl.

PiperOrigin-RevId: 471791828
diff --git a/rs_bindings_from_cc/collect_namespaces.cc b/rs_bindings_from_cc/collect_namespaces.cc
index b921496..8b2bfd0 100644
--- a/rs_bindings_from_cc/collect_namespaces.cc
+++ b/rs_bindings_from_cc/collect_namespaces.cc
@@ -79,14 +79,14 @@
     }
   }
 
-  // Converts a trie node into the JSON serializable NamespaceForCcImport.
-  NamespaceForCcImport NodeToNamespaceForCcImport(const Node* node) const {
-    std::vector<NamespaceForCcImport> namespaces;
+  // Converts a trie node into the JSON serializable NamespaceNode.
+  NamespaceNode NodeToNamespaceNode(const Node* node) const {
+    std::vector<NamespaceNode> namespaces;
     namespaces.reserve(node->child_name_to_idx.size());
     for (const auto& [_, idx] : node->child_name_to_idx) {
-      namespaces.push_back(NodeToNamespaceForCcImport(&trie_nodes_[idx]));
+      namespaces.push_back(NodeToNamespaceNode(&trie_nodes_[idx]));
     }
-    return NamespaceForCcImport{std::string(node->name), std::move(namespaces)};
+    return NamespaceNode{std::string(node->name), std::move(namespaces)};
   }
 
  public:
@@ -118,21 +118,21 @@
     }
   }
 
-  // Converts the trie into the JSON serializable AllNamespacesForCcImport.
-  AllNamespacesForCcImport ToAllNamespacesForCcImport() {
-    std::vector<NamespaceForCcImport> namespaces;
+  // Converts the trie into the JSON serializable NamespacesHierarchy.
+  NamespacesHierarchy ToNamespacesHierarchy() {
+    std::vector<NamespaceNode> namespaces;
     namespaces.reserve(this->top_level_name_to_idx_.size());
     for (auto& [_, idx] : this->top_level_name_to_idx_) {
-      namespaces.push_back(NodeToNamespaceForCcImport(&trie_nodes_[idx]));
+      namespaces.push_back(NodeToNamespaceNode(&trie_nodes_[idx]));
     }
-    return AllNamespacesForCcImport{std::move(namespaces)};
+    return NamespacesHierarchy{std::move(namespaces)};
   }
 };
 
 }  // namespace
 
 // Returns the current target's namespace hierarchy in JSON serializable format.
-AllNamespacesForCcImport CollectNamespaces(const IR& ir) {
+NamespacesHierarchy CollectNamespaces(const IR& ir) {
   auto all_namespaces = ir.get_items_if<Namespace>();
   absl::flat_hash_map<ItemId, const Namespace*> id_to_namespace;
   for (auto ns : all_namespaces) {
@@ -152,10 +152,10 @@
     trie.InsertTopLevel(ns);
   }
 
-  return trie.ToAllNamespacesForCcImport();
+  return trie.ToNamespacesHierarchy();
 }
 
-llvm::json::Value NamespaceForCcImport::ToJson() const {
+llvm::json::Value NamespaceNode::ToJson() const {
   std::vector<llvm::json::Value> json_children;
   json_children.reserve(children.size());
   for (const auto& child : children) {
@@ -172,7 +172,7 @@
   };
 }
 
-llvm::json::Value AllNamespacesForCcImport::ToJson() const {
+llvm::json::Value NamespacesHierarchy::ToJson() const {
   std::vector<llvm::json::Value> json_namespaces;
   json_namespaces.reserve(namespaces.size());
   for (const auto& ns : namespaces) {