diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc
index d9c3ad2..376c943 100644
--- a/src/gn/ninja_c_binary_target_writer.cc
+++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -780,8 +780,7 @@
   // entire tree of transitive rlibs.
   std::vector<OutputFile> transitive_rustlibs;
   if (target_->IsFinal()) {
-    for (const auto* dep :
-         target_->rust_values().transitive_libs().GetOrdered()) {
+    for (const auto* dep : target_->rust_transitive_libs().GetOrdered()) {
       if (dep->output_type() == Target::RUST_LIBRARY) {
         transitive_rustlibs.push_back(dep->dependency_output_file());
         implicit_deps.push_back(dep->dependency_output_file());
diff --git a/src/gn/ninja_rust_binary_target_writer.cc b/src/gn/ninja_rust_binary_target_writer.cc
index 140fe09..d894681 100644
--- a/src/gn/ninja_rust_binary_target_writer.cc
+++ b/src/gn/ninja_rust_binary_target_writer.cc
@@ -178,8 +178,7 @@
 
   // Bubble up the full list of transitive rlib dependencies.
   std::vector<OutputFile> transitive_rustlibs;
-  for (const auto* dep :
-       target_->rust_values().transitive_libs().GetOrdered()) {
+  for (const auto* dep : target_->rust_transitive_libs().GetOrdered()) {
     if (dep->source_types_used().RustSourceUsed()) {
       transitive_rustlibs.push_back(dep->dependency_output_file());
     }
diff --git a/src/gn/rust_values.h b/src/gn/rust_values.h
index 3185340..d201014 100644
--- a/src/gn/rust_values.h
+++ b/src/gn/rust_values.h
@@ -74,16 +74,11 @@
   }
   std::map<Label, std::string>& aliased_deps() { return aliased_deps_; }
 
-  // Transitive closure of libraries that are depended on by this target
-  InheritedLibraries& transitive_libs() { return rust_libs_; }
-  const InheritedLibraries& transitive_libs() const { return rust_libs_; }
-
  private:
   std::string crate_name_;
   SourceFile crate_root_;
   CrateType crate_type_ = CRATE_AUTO;
   std::map<Label, std::string> aliased_deps_;
-  InheritedLibraries rust_libs_;
 
   RustValues(const RustValues&) = delete;
   RustValues& operator=(const RustValues&) = delete;
diff --git a/src/gn/target.cc b/src/gn/target.cc
index 7071357..d9c02d3 100644
--- a/src/gn/target.cc
+++ b/src/gn/target.cc
@@ -655,13 +655,13 @@
   if (dep->output_type() == STATIC_LIBRARY ||
       dep->output_type() == SHARED_LIBRARY ||
       dep->output_type() == RUST_LIBRARY) {
-    rust_values().transitive_libs().Append(dep, is_public);
+    rust_transitive_libs_.Append(dep, is_public);
 
     // Propagate public dependent libraries.
     for (const auto& transitive :
-         dep->rust_values().transitive_libs().GetOrderedAndPublicFlag()) {
+         dep->rust_transitive_libs_.GetOrderedAndPublicFlag()) {
       if (transitive.second) {
-        rust_values().transitive_libs().Append(transitive.first, is_public);
+        rust_transitive_libs_.Append(transitive.first, is_public);
       }
     }
   }
@@ -670,13 +670,13 @@
   // handled the same way, whether static or dynamic.
   if (dep->output_type() == RUST_LIBRARY ||
       RustValues::InferredCrateType(dep) == RustValues::CRATE_DYLIB) {
-    rust_values().transitive_libs().AppendInherited(
-        dep->rust_values().transitive_libs(), is_public);
+    rust_transitive_libs_.AppendInherited(dep->rust_transitive_libs_,
+                                          is_public);
 
     // If there is a transitive dependency that is not a rust library, place it
     // in the normal location
     for (const auto& inherited :
-         rust_values().transitive_libs().GetOrderedAndPublicFlag()) {
+         rust_transitive_libs_.GetOrderedAndPublicFlag()) {
       if (!RustValues::IsRustLibrary(inherited.first)) {
         inherited_libraries_.Append(inherited.first, inherited.second);
       }
@@ -685,7 +685,7 @@
     // We will need to specify the path to find a procedural macro,
     // but have no need to specify the paths to find its dependencies
     // as the procedural macro is now a complete .so.
-    rust_values().transitive_libs().Append(dep, is_public);
+    rust_transitive_libs_.Append(dep, is_public);
   } else if (dep->output_type() == SHARED_LIBRARY) {
     // Shared library dependendencies are inherited across public shared
     // library boundaries.
@@ -713,8 +713,8 @@
     // The current target isn't linked, so propagate linked deps and
     // libraries up the dependency tree.
     inherited_libraries_.AppendInherited(dep->inherited_libraries(), is_public);
-    rust_values().transitive_libs().AppendInherited(
-        dep->rust_values().transitive_libs(), is_public);
+    rust_transitive_libs_.AppendInherited(dep->rust_transitive_libs_,
+                                          is_public);
   } else if (dep->complete_static_lib()) {
     // Inherit only final targets through _complete_ static libraries.
     //
diff --git a/src/gn/target.h b/src/gn/target.h
index 293d53c..fec9731 100644
--- a/src/gn/target.h
+++ b/src/gn/target.h
@@ -284,6 +284,12 @@
   RustValues& rust_values() { return rust_values_; }
   const RustValues& rust_values() const { return rust_values_; }
 
+  // Transitive closure of libraries that are depended on by this target
+  InheritedLibraries& rust_transitive_libs() { return rust_transitive_libs_; }
+  const InheritedLibraries& rust_transitive_libs() const {
+    return rust_transitive_libs_;
+  }
+
   const UniqueVector<SourceDir>& all_lib_dirs() const { return all_lib_dirs_; }
   const UniqueVector<LibFile>& all_libs() const { return all_libs_; }
 
@@ -485,6 +491,9 @@
   // Used for Rust targets.
   RustValues rust_values_;
 
+  // Used by all targets, only useful to generate Rust targets though.
+  InheritedLibraries rust_transitive_libs_;
+
   // User for Swift targets.
   SwiftValues swift_values_;
 
