Use the name of the rust_proto_library as the crate name

PiperOrigin-RevId: 634414403
diff --git a/conformance/conformance_rust.rs b/conformance/conformance_rust.rs
index 6520f16..122587b 100644
--- a/conformance/conformance_rust.rs
+++ b/conformance/conformance_rust.rs
@@ -4,7 +4,7 @@
 // license that can be found in the LICENSE file or at
 // https://developers.google.com/open-source/licenses/bsd
 
-use conformance_proto::{ConformanceRequest, ConformanceResponse, WireFormat};
+use conformance_rust_proto::{ConformanceRequest, ConformanceResponse, WireFormat};
 
 #[cfg(cpp_kernel)]
 use protobuf_cpp as kernel;
@@ -15,11 +15,11 @@
 use kernel::Optional::{Set, Unset};
 
 use std::io::{self, ErrorKind, Read, Write};
-use test_messages_edition2023_proto::TestAllTypesEdition2023;
-use test_messages_proto2::TestAllTypesProto2;
-use test_messages_proto2_editions_proto::TestAllTypesProto2 as EditionsTestAllTypesProto2;
-use test_messages_proto3::TestAllTypesProto3;
-use test_messages_proto3_editions_proto::TestAllTypesProto3 as EditionsTestAllTypesProto3;
+use test_messages_edition2023_rust_proto::TestAllTypesEdition2023;
+use test_messages_proto2_editions_rust_proto::TestAllTypesProto2 as EditionsTestAllTypesProto2;
+use test_messages_proto2_rust_proto::TestAllTypesProto2;
+use test_messages_proto3_editions_rust_proto::TestAllTypesProto3 as EditionsTestAllTypesProto3;
+use test_messages_proto3_rust_proto::TestAllTypesProto3;
 
 /// Returns Some(i32) if a binary read can succeed from stdin.
 /// Returns None if we have reached an EOF.
diff --git a/rust/defs.bzl b/rust/defs.bzl
index b63e437..9f6670a 100644
--- a/rust/defs.bzl
+++ b/rust/defs.bzl
@@ -4,9 +4,11 @@
 be used yet."""
 
 load("@rules_proto//proto:defs.bzl", "ProtoInfo", "proto_common")
+load("@rules_rust//rust:defs.bzl", "rust_common")
 load(
     "//rust:aspects.bzl",
     "RustProtoInfo",
+    "label_to_crate_name",
     "proto_rust_toolchain_label",
     "rust_cc_proto_library_aspect",
     "rust_upb_proto_library_aspect",
@@ -89,8 +91,23 @@
     rust_proto_info = dep[RustProtoInfo]
 
     dep_variant_info = rust_proto_info.dep_variant_info
+    crate_info = dep_variant_info.crate_info
+
+    # Change the crate name from the hame of the proto_library to the name of the rust_proto_library.
+    #
+    # When the aspect visits proto_libraries, it doesn't know and cannot deduce the name of the
+    # rust_proto_library (although the name of rust_proto_libraries is consistently ending with
+    # _rust_proto, we can't rely on all proto_libraires to have a name consistently ending with
+    # _proto), therefore we have to modify it after the fact here.
+    #
+    # Since Starlark providers are frozen once they leave the _impl function that defines them,
+    # we have to create a shallow copy.
+    fields = {field: getattr(crate_info, field) for field in dir(crate_info)}
+    fields["name"] = label_to_crate_name(_user_visible_label(ctx))
+    crate_info_with_rust_proto_name = rust_common.crate_info(**fields)
+
     return [
-        dep_variant_info.crate_info,
+        crate_info_with_rust_proto_name,
         dep_variant_info.dep_info,
         dep_variant_info.cc_info,
         DefaultInfo(files = dep_variant_info.crate_info.srcs),
diff --git a/rust/test/BUILD b/rust/test/BUILD
index 9e3e9c4..f7d0d0a 100644
--- a/rust/test/BUILD
+++ b/rust/test/BUILD
@@ -18,7 +18,7 @@
 )
 
 rust_cc_proto_library(
-    name = "unittest_cc_rust_proto",
+    name = "unittest_cpp_rust_proto",
     testonly = True,
     visibility = [
         "//rust/test/cpp:__subpackages__",
@@ -28,7 +28,7 @@
 )
 
 rust_cc_proto_library(
-    name = "unittest_proto3_cc_rust_proto",
+    name = "unittest_proto3_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [UNITTEST_PROTO3_TARGET],
@@ -42,7 +42,7 @@
 )
 
 rust_cc_proto_library(
-    name = "unittest_proto3_optional_cc_rust_proto",
+    name = "unittest_proto3_optional_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [UNITTEST_PROTO3_OPTIONAL_TARGET],
@@ -83,14 +83,14 @@
 )
 
 rust_cc_proto_library(
-    name = "parent_cc_rust_proto",
+    name = "parent_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":parent_proto"],
 )
 
 rust_cc_proto_library(
-    name = "child_cc_rust_proto",
+    name = "child_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":child_proto"],
@@ -103,7 +103,7 @@
 )
 
 rust_cc_proto_library(
-    name = "dots_in_package_cc_rust_proto",
+    name = "dots_in_package_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":dots_in_package_proto"],
@@ -123,7 +123,7 @@
 )
 
 rust_cc_proto_library(
-    name = "edition2023_cc_rust_proto",
+    name = "edition2023_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":edition2023_proto"],
@@ -144,7 +144,7 @@
 )
 
 rust_cc_proto_library(
-    name = "enums_cc_rust_proto",
+    name = "enums_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":enums_proto"],
@@ -198,7 +198,7 @@
 )
 
 rust_cc_proto_library(
-    name = "import_public_cc_rust_proto",
+    name = "import_public_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":import_public_proto"],
@@ -233,7 +233,7 @@
 )
 
 rust_cc_proto_library(
-    name = "no_package_cc_rust_proto",
+    name = "no_package_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":no_package_proto"],
@@ -265,7 +265,7 @@
 )
 
 rust_cc_proto_library(
-    name = "package_cc_rust_proto",
+    name = "package_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":package_proto"],
@@ -296,7 +296,7 @@
 )
 
 rust_cc_proto_library(
-    name = "package_disabiguation_cc_rust_proto",
+    name = "package_disabiguation_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":package_disabiguation_proto"],
@@ -309,7 +309,7 @@
 )
 
 rust_cc_proto_library(
-    name = "bad_names_cc_rust_proto",
+    name = "bad_names_cpp_rust_proto",
     testonly = True,
     visibility = ["//rust/test/shared:__subpackages__"],
     deps = [":bad_names_proto"],
@@ -329,7 +329,7 @@
 )
 
 rust_cc_proto_library(
-    name = "nested_cc_rust_proto",
+    name = "nested_cpp_rust_proto",
     testonly = True,
     visibility = [
         "//rust/test/cpp:__subpackages__",
@@ -349,7 +349,7 @@
 )
 
 rust_cc_proto_library(
-    name = "map_unittest_cc_rust_proto",
+    name = "map_unittest_cpp_rust_proto",
     testonly = True,
     visibility = [
         "//rust/test/shared:__subpackages__",
@@ -367,37 +367,13 @@
 )
 
 proto_library(
-    name = "struct",
-    testonly = True,
-    srcs = ["struct.proto"],
-)
-
-rust_cc_proto_library(
-    name = "struct_cc_rust_proto",
-    testonly = True,
-    visibility = [
-        "//rust/test/shared:__subpackages__",
-    ],
-    deps = [":struct"],
-)
-
-rust_upb_proto_library(
-    name = "struct_upb_rust_proto",
-    testonly = True,
-    visibility = [
-        "//rust/test/shared:__subpackages__",
-    ],
-    deps = [":struct"],
-)
-
-proto_library(
     name = "imported_types_proto",
     testonly = True,
     srcs = ["imported_types.proto"],
 )
 
 rust_cc_proto_library(
-    name = "imported_types_cc_rust_proto",
+    name = "imported_types_cpp_rust_proto",
     testonly = True,
     visibility = [
         "//rust/test/shared:__subpackages__",
@@ -423,7 +399,7 @@
 )
 
 rust_cc_proto_library(
-    name = "fields_with_imported_types_cc_rust_proto",
+    name = "fields_with_imported_types_cpp_rust_proto",
     testonly = True,
     visibility = [
         "//rust/test/shared:__subpackages__",
diff --git a/rust/test/cpp/BUILD b/rust/test/cpp/BUILD
index 0e141c7..80b6761 100644
--- a/rust/test/cpp/BUILD
+++ b/rust/test/cpp/BUILD
@@ -24,7 +24,7 @@
 )
 
 rust_cc_proto_library(
-    name = "debug_rust_proto",
+    name = "debug_cpp_rust_proto",
     testonly = True,
     deps = [":debug_proto"],
 )
@@ -33,7 +33,7 @@
     name = "debug_test",
     srcs = ["debug_test.rs"],
     deps = [
-        ":debug_rust_proto",
+        ":debug_cpp_rust_proto",
         "//rust:protobuf_cpp",
         "@crate_index//:googletest",
     ],
diff --git a/rust/test/cpp/debug_test.rs b/rust/test/cpp/debug_test.rs
index eb9237e..6fb45a5 100644
--- a/rust/test/cpp/debug_test.rs
+++ b/rust/test/cpp/debug_test.rs
@@ -1,4 +1,4 @@
-use debug_proto::DebugMsg;
+use debug_rust_proto::DebugMsg;
 use googletest::prelude::*;
 
 #[test]
diff --git a/rust/test/cpp/interop/BUILD b/rust/test/cpp/interop/BUILD
index 229f733..6faac7a 100644
--- a/rust/test/cpp/interop/BUILD
+++ b/rust/test/cpp/interop/BUILD
@@ -18,7 +18,7 @@
     deps = [
         ":test_utils",
         "//rust:protobuf_cpp",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
diff --git a/rust/test/cpp/interop/main.rs b/rust/test/cpp/interop/main.rs
index f8e0527..3699825 100644
--- a/rust/test/cpp/interop/main.rs
+++ b/rust/test/cpp/interop/main.rs
@@ -7,7 +7,7 @@
 
 use googletest::prelude::*;
 use protobuf_cpp::__runtime::{PtrAndLen, RawMessage};
-use unittest_proto::{TestAllExtensions, TestAllTypes, TestAllTypesMut, TestAllTypesView};
+use unittest_rust_proto::{TestAllExtensions, TestAllTypes, TestAllTypesMut, TestAllTypesView};
 
 macro_rules! proto_assert_eq {
     ($lhs:expr, $rhs:expr) => {{
diff --git a/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl b/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl
index 89ec161..58e8427 100644
--- a/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl
+++ b/rust/test/rust_proto_library_unit_test/rust_proto_library_unit_test.bzl
@@ -173,7 +173,7 @@
     target_under_test = analysistest.target_under_test(env)
 
     label_to_file = {
-        "child_cc_rust_proto": "child.c.pb.rs",
+        "child_cpp_rust_proto": "child.c.pb.rs",
         "child_upb_rust_proto": "child.u.pb.rs",
     }
     expected_output = label_to_file[target_under_test.label.name]
@@ -185,13 +185,13 @@
 
 def _test_cc_outputs():
     rust_cc_proto_library(
-        name = "child_cc_rust_proto",
+        name = "child_cpp_rust_proto",
         deps = [":child_proto"],
     )
 
     rust_outputs_test(
         name = "rust_cc_outputs_test",
-        target_under_test = ":child_cc_rust_proto",
+        target_under_test = ":child_cpp_rust_proto",
     )
 
 def _test_upb_outputs():
diff --git a/rust/test/shared/BUILD b/rust/test/shared/BUILD
index fe7eae4..bdc441c 100644
--- a/rust/test/shared/BUILD
+++ b/rust/test/shared/BUILD
@@ -30,8 +30,8 @@
     name = "child_parent_cpp_test",
     srcs = ["child_parent_test.rs"],
     deps = [
-        "//rust/test:child_cc_rust_proto",
-        "//rust/test:parent_cc_rust_proto",
+        "//rust/test:child_cpp_rust_proto",
+        "//rust/test:parent_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -40,7 +40,7 @@
     name = "edition2023_cpp_test",
     srcs = ["edition2023_test.rs"],
     deps = [
-        "//rust/test:edition2023_cc_rust_proto",
+        "//rust/test:edition2023_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -62,8 +62,8 @@
     },
     deps = [
         "//rust:protobuf_cpp_export",
-        "//rust/test:enums_cc_rust_proto",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:enums_cpp_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -86,7 +86,7 @@
     name = "import_public_cpp_test",
     srcs = ["import_public_test.rs"],
     deps = [
-        "//rust/test:import_public_cc_rust_proto",
+        "//rust/test:import_public_cpp_rust_proto",
     ],
 )
 
@@ -102,9 +102,9 @@
     name = "package_cpp_test",
     srcs = ["package_test.rs"],
     deps = [
-        "//rust/test:dots_in_package_cc_rust_proto",
-        "//rust/test:no_package_cc_rust_proto",
-        "//rust/test:package_cc_rust_proto",
+        "//rust/test:dots_in_package_cpp_rust_proto",
+        "//rust/test:no_package_cpp_rust_proto",
+        "//rust/test:package_cpp_rust_proto",
     ],
 )
 
@@ -121,7 +121,7 @@
 rust_test(
     name = "package_disambiguation_cpp_test",
     srcs = ["package_disambiguation_test.rs"],
-    deps = ["//rust/test:package_disabiguation_cc_rust_proto"],
+    deps = ["//rust/test:package_disabiguation_cpp_rust_proto"],
 )
 
 rust_test(
@@ -134,8 +134,8 @@
     name = "bad_names_cpp_test",
     srcs = ["bad_names_test.rs"],
     deps = [
-        "//rust/test:bad_names_cc_rust_proto",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:bad_names_cpp_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -155,7 +155,7 @@
 rust_test(
     name = "nested_types_cpp_test",
     srcs = ["nested_types_test.rs"],
-    deps = ["//rust/test:unittest_cc_rust_proto"],
+    deps = ["//rust/test:unittest_cpp_rust_proto"],
 )
 
 rust_test(
@@ -175,7 +175,7 @@
     ],
     deps = [
         "//rust:protobuf_cpp_export",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -204,8 +204,8 @@
     },
     deps = [
         "//rust:protobuf_cpp_export",
-        "//rust/test:unittest_proto3_cc_rust_proto",
-        "//rust/test:unittest_proto3_optional_cc_rust_proto",
+        "//rust/test:unittest_proto3_cpp_rust_proto",
+        "//rust/test:unittest_proto3_optional_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -237,7 +237,7 @@
     name = "serialization_cpp_test",
     srcs = ["serialization_test.rs"],
     deps = [
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -250,7 +250,7 @@
     },
     deps = [
         "//rust:protobuf_cpp_export",
-        "//rust/test:nested_cc_rust_proto",
+        "//rust/test:nested_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -279,7 +279,7 @@
     ],
     deps = [
         "//rust:protobuf_cpp_export",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -307,9 +307,9 @@
         "@crate_index//:paste",
     ],
     deps = [
-        "//rust/test:enums_cc_rust_proto",
-        "//rust/test:map_unittest_cc_rust_proto",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:enums_cpp_rust_proto",
+        "//rust/test:map_unittest_cpp_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -329,28 +329,12 @@
 )
 
 rust_test(
-    name = "reserved_crate_name_cc_test",
-    srcs = ["reserved_crate_name_test.rs"],
-    deps = [
-        "//rust/test:struct_cc_rust_proto",
-    ],
-)
-
-rust_test(
-    name = "reserved_crate_name_upb_test",
-    srcs = ["reserved_crate_name_test.rs"],
-    deps = [
-        "//rust/test:struct_upb_rust_proto",
-    ],
-)
-
-rust_test(
     name = "fields_with_imported_types_cpp_test",
     srcs = ["fields_with_imported_types_test.rs"],
     deps = [
         "//rust:protobuf_cpp_export",
-        "//rust/test:fields_with_imported_types_cc_rust_proto",
-        "//rust/test:imported_types_cc_rust_proto",
+        "//rust/test:fields_with_imported_types_cpp_rust_proto",
+        "//rust/test:imported_types_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
@@ -374,7 +358,7 @@
     },
     deps = [
         "//rust:protobuf_cpp",
-        "//rust/test:unittest_cc_rust_proto",
+        "//rust/test:unittest_cpp_rust_proto",
         "@crate_index//:googletest",
     ],
 )
diff --git a/rust/test/shared/accessors_map_test.rs b/rust/test/shared/accessors_map_test.rs
index 3120bd8..b743180 100644
--- a/rust/test/shared/accessors_map_test.rs
+++ b/rust/test/shared/accessors_map_test.rs
@@ -5,12 +5,12 @@
 // license that can be found in the LICENSE file or at
 // https://developers.google.com/open-source/licenses/bsd
 
-use enums_proto::{test_map_with_nested_enum, TestMapWithNestedEnum};
+use enums_rust_proto::{test_map_with_nested_enum, TestMapWithNestedEnum};
 use googletest::prelude::*;
-use map_unittest_proto::{MapEnum, TestMap, TestMapWithMessages};
+use map_unittest_rust_proto::{MapEnum, TestMap, TestMapWithMessages};
 use paste::paste;
 use std::collections::HashMap;
-use unittest_proto::TestAllTypes;
+use unittest_rust_proto::TestAllTypes;
 
 macro_rules! generate_map_primitives_tests {
     (
diff --git a/rust/test/shared/accessors_proto3_test.rs b/rust/test/shared/accessors_proto3_test.rs
index 57356fa..f7517e3 100644
--- a/rust/test/shared/accessors_proto3_test.rs
+++ b/rust/test/shared/accessors_proto3_test.rs
@@ -9,8 +9,8 @@
 /// on proto3.
 use googletest::prelude::*;
 use protobuf::Optional;
-use unittest_proto3::{test_all_types, TestAllTypes};
-use unittest_proto3_optional::{test_proto3_optional, TestProto3Optional};
+use unittest_proto3_optional_rust_proto::{test_proto3_optional, TestProto3Optional};
+use unittest_proto3_rust_proto::{test_all_types, TestAllTypes};
 
 #[test]
 fn test_fixed32_accessors() {
@@ -156,7 +156,7 @@
 
 #[test]
 fn test_foreign_enum_accessors() {
-    use unittest_proto3::ForeignEnum;
+    use unittest_proto3_rust_proto::ForeignEnum;
 
     let mut msg = TestAllTypes::new();
     assert_that!(msg.optional_foreign_enum(), eq(ForeignEnum::ForeignZero));
@@ -215,7 +215,7 @@
 
 #[test]
 fn test_oneof_enum_accessors() {
-    use unittest_proto3::{
+    use unittest_proto3_rust_proto::{
         test_oneof2::{Foo, FooCase, NestedEnum},
         TestOneof2,
     };
diff --git a/rust/test/shared/accessors_repeated_test.rs b/rust/test/shared/accessors_repeated_test.rs
index 4c5356a..b93b123 100644
--- a/rust/test/shared/accessors_repeated_test.rs
+++ b/rust/test/shared/accessors_repeated_test.rs
@@ -8,7 +8,7 @@
 use googletest::prelude::*;
 use paste::paste;
 use protobuf::ViewProxy;
-use unittest_proto::{test_all_types, test_all_types::NestedMessage, TestAllTypes};
+use unittest_rust_proto::{test_all_types, test_all_types::NestedMessage, TestAllTypes};
 
 macro_rules! generate_repeated_numeric_test {
   ($(($t: ty, $field: ident)),*) => {
diff --git a/rust/test/shared/accessors_test.rs b/rust/test/shared/accessors_test.rs
index 2c32451..262d0c8 100644
--- a/rust/test/shared/accessors_test.rs
+++ b/rust/test/shared/accessors_test.rs
@@ -9,7 +9,7 @@
 
 use googletest::prelude::*;
 use protobuf::Optional;
-use unittest_proto::{test_all_types, TestAllTypes};
+use unittest_rust_proto::{test_all_types, TestAllTypes};
 
 #[test]
 fn test_default_accessors() {
@@ -515,8 +515,8 @@
 fn test_message_opt() {
     let msg = TestAllTypes::new();
     let opt: Optional<
-        unittest_proto::test_all_types::NestedMessageView<'_>,
-        unittest_proto::test_all_types::NestedMessageView<'_>,
+        unittest_rust_proto::test_all_types::NestedMessageView<'_>,
+        unittest_rust_proto::test_all_types::NestedMessageView<'_>,
     > = msg.optional_nested_message_opt();
     assert_that!(opt.is_set(), eq(false));
     assert_that!(opt.into_inner().bb(), eq(0));
@@ -604,7 +604,7 @@
 
 #[test]
 fn test_optional_foreign_enum_accessors() {
-    use unittest_proto::ForeignEnum;
+    use unittest_rust_proto::ForeignEnum;
 
     let mut msg = TestAllTypes::new();
     assert_that!(msg.optional_foreign_enum_opt(), eq(Optional::Unset(ForeignEnum::ForeignFoo)));
@@ -621,7 +621,7 @@
 
 #[test]
 fn test_default_foreign_enum_accessors() {
-    use unittest_proto::ForeignEnum;
+    use unittest_rust_proto::ForeignEnum;
 
     let mut msg = TestAllTypes::new();
     assert_that!(msg.default_foreign_enum(), eq(ForeignEnum::ForeignBar));
@@ -638,7 +638,7 @@
 
 #[test]
 fn test_optional_import_enum_accessors() {
-    use unittest_proto::ImportEnum;
+    use unittest_rust_proto::ImportEnum;
 
     let mut msg = TestAllTypes::new();
     assert_that!(msg.optional_import_enum_opt(), eq(Optional::Unset(ImportEnum::ImportFoo)));
@@ -655,7 +655,7 @@
 
 #[test]
 fn test_default_import_enum_accessors() {
-    use unittest_proto::ImportEnum;
+    use unittest_rust_proto::ImportEnum;
 
     let mut msg = TestAllTypes::new();
     assert_that!(msg.default_import_enum(), eq(ImportEnum::ImportBar));
@@ -672,8 +672,8 @@
 
 #[test]
 fn test_oneof_accessors() {
-    use unittest_proto::test_oneof2::{Foo::*, FooCase, NestedEnum};
-    use unittest_proto::TestOneof2;
+    use unittest_rust_proto::test_oneof2::{Foo::*, FooCase, NestedEnum};
+    use unittest_rust_proto::TestOneof2;
 
     let mut msg = TestOneof2::new();
     assert_that!(msg.foo(), matches_pattern!(not_set(_)));
@@ -723,9 +723,9 @@
 
 #[test]
 fn test_msg_oneof_default_accessors() {
-    use unittest_proto::test_oneof2::{Bar::*, BarCase, NestedEnum};
+    use unittest_rust_proto::test_oneof2::{Bar::*, BarCase, NestedEnum};
 
-    let mut msg = unittest_proto::TestOneof2::new();
+    let mut msg = unittest_rust_proto::TestOneof2::new();
     assert_that!(msg.bar(), matches_pattern!(not_set(_)));
 
     msg.set_bar_int(7);
diff --git a/rust/test/shared/bad_names_test.rs b/rust/test/shared/bad_names_test.rs
index a4b133b..19ba507 100644
--- a/rust/test/shared/bad_names_test.rs
+++ b/rust/test/shared/bad_names_test.rs
@@ -5,7 +5,7 @@
 // license that can be found in the LICENSE file or at
 // https://developers.google.com/open-source/licenses/bsd
 
-use bad_names_proto::*;
+use bad_names_rust_proto::*;
 use googletest::prelude::*;
 
 #[test]
diff --git a/rust/test/shared/child_parent_test.rs b/rust/test/shared/child_parent_test.rs
index dee69af..80b659d 100644
--- a/rust/test/shared/child_parent_test.rs
+++ b/rust/test/shared/child_parent_test.rs
@@ -9,19 +9,19 @@
 
 #[test]
 fn test_canonical_types() {
-    let _child = child_proto::Child::new();
-    let _parent = parent_proto::Parent::new();
-    // Parent from child_proto crate should be the same type as Parent from
-    // parent_proto crate.
-    let _parent_from_child: child_proto::Parent = parent_proto::Parent::new();
+    let _child = child_rust_proto::Child::new();
+    let _parent = parent_rust_proto::Parent::new();
+    // Parent from child_rust_proto crate should be the same type as Parent from
+    // parent_rust_proto crate.
+    let _parent_from_child: child_rust_proto::Parent = parent_rust_proto::Parent::new();
 }
 
 #[test]
 fn test_parent_serialization() {
-    assert_that!(*parent_proto::Parent::new().serialize(), empty());
+    assert_that!(*parent_rust_proto::Parent::new().serialize(), empty());
 }
 
 #[test]
 fn test_child_serialization() {
-    assert_that!(*child_proto::Child::new().serialize(), empty());
+    assert_that!(*child_rust_proto::Child::new().serialize(), empty());
 }
diff --git a/rust/test/shared/edition2023_test.rs b/rust/test/shared/edition2023_test.rs
index 44f10be..835ae66 100644
--- a/rust/test/shared/edition2023_test.rs
+++ b/rust/test/shared/edition2023_test.rs
@@ -13,7 +13,7 @@
 
 #[test]
 fn check_edition2023_works() {
-    let msg = edition2023_proto::EditionsMessage::new();
+    let msg = edition2023_rust_proto::EditionsMessage::new();
     assert_that!(msg.plain_field_opt().into_inner(), eq(0));
     assert_that!(msg.implicit_presence_field(), eq(0));
 }
diff --git a/rust/test/shared/enum_test.rs b/rust/test/shared/enum_test.rs
index 1c8e7fd..a19bcb9 100644
--- a/rust/test/shared/enum_test.rs
+++ b/rust/test/shared/enum_test.rs
@@ -7,10 +7,10 @@
 
 //! Tests covering enum type generation.
 
-use enums_proto::*;
+use enums_rust_proto::*;
 use googletest::prelude::*;
 use protobuf::Enum;
-use unittest_proto::*;
+use unittest_rust_proto::*;
 
 #[test]
 fn test_nested_enum_values() {
diff --git a/rust/test/shared/fields_with_imported_types_test.rs b/rust/test/shared/fields_with_imported_types_test.rs
index c3bab55..6b1b17c 100644
--- a/rust/test/shared/fields_with_imported_types_test.rs
+++ b/rust/test/shared/fields_with_imported_types_test.rs
@@ -12,8 +12,8 @@
 
 #[test]
 fn test_message_field_generated() {
-    use fields_with_imported_types_proto::MsgWithFieldsWithImportedTypes;
-    use imported_types_proto::ImportedMessageView;
+    use fields_with_imported_types_rust_proto::MsgWithFieldsWithImportedTypes;
+    use imported_types_rust_proto::ImportedMessageView;
 
     let msg = MsgWithFieldsWithImportedTypes::new();
     assert_that!(msg.imported_message_field(), matches_pattern!(ImportedMessageView { .. }));
@@ -21,8 +21,8 @@
 
 #[test]
 fn test_enum_field_generated() {
-    use fields_with_imported_types_proto::MsgWithFieldsWithImportedTypes;
-    use imported_types_proto::ImportedEnum;
+    use fields_with_imported_types_rust_proto::MsgWithFieldsWithImportedTypes;
+    use imported_types_rust_proto::ImportedEnum;
 
     let msg = MsgWithFieldsWithImportedTypes::new();
     assert_that!(msg.imported_enum_field(), eq(ImportedEnum::Unknown));
@@ -30,10 +30,10 @@
 
 #[test]
 fn test_oneof_message_field_generated() {
-    use fields_with_imported_types_proto::msg_with_fields_with_imported_types::ImportedTypesOneof::not_set;
-    use fields_with_imported_types_proto::MsgWithFieldsWithImportedTypes;
-    use imported_types_proto::ImportedEnum;
-    use imported_types_proto::ImportedMessageView;
+    use fields_with_imported_types_rust_proto::msg_with_fields_with_imported_types::ImportedTypesOneof::not_set;
+    use fields_with_imported_types_rust_proto::MsgWithFieldsWithImportedTypes;
+    use imported_types_rust_proto::ImportedEnum;
+    use imported_types_rust_proto::ImportedMessageView;
 
     let msg = MsgWithFieldsWithImportedTypes::new();
     assert_that!(msg.imported_message_oneof(), matches_pattern!(ImportedMessageView { .. }));
diff --git a/rust/test/shared/import_public_test.rs b/rust/test/shared/import_public_test.rs
index 57e9706..4d05ad8 100644
--- a/rust/test/shared/import_public_test.rs
+++ b/rust/test/shared/import_public_test.rs
@@ -9,27 +9,27 @@
 
 #[test]
 fn test_import_public_types_are_reexported() {
-    let _: import_public_proto::PrimarySrcPubliclyImportedMsg;
-    let _: import_public_proto::PrimarySrcPubliclyImportedMsgView;
-    let _: import_public_proto::PrimarySrcPubliclyImportedMsgMut;
+    let _: import_public_rust_proto::PrimarySrcPubliclyImportedMsg;
+    let _: import_public_rust_proto::PrimarySrcPubliclyImportedMsgView;
+    let _: import_public_rust_proto::PrimarySrcPubliclyImportedMsgMut;
 
-    let _: import_public_proto::PrimarySrcPubliclyImportedEnum;
+    let _: import_public_rust_proto::PrimarySrcPubliclyImportedEnum;
 
-    let _: import_public_proto::GrandparentMsg;
-    let _: import_public_proto::GrandparentMsgView;
-    let _: import_public_proto::GrandparentMsgMut;
+    let _: import_public_rust_proto::GrandparentMsg;
+    let _: import_public_rust_proto::GrandparentMsgView;
+    let _: import_public_rust_proto::GrandparentMsgMut;
 
-    let _: import_public_proto::GrandparentEnum;
+    let _: import_public_rust_proto::GrandparentEnum;
 
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedMsg1;
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedMsg1View;
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedMsg1Mut;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedMsg1;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedMsg1View;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedMsg1Mut;
 
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedEnum1;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedEnum1;
 
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedMsg2;
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedMsg2View;
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedMsg2Mut;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedMsg2;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedMsg2View;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedMsg2Mut;
 
-    let _: import_public_proto::NonPrimarySrcPubliclyImportedEnum2;
+    let _: import_public_rust_proto::NonPrimarySrcPubliclyImportedEnum2;
 }
diff --git a/rust/test/shared/nested_types_test.rs b/rust/test/shared/nested_types_test.rs
index 6698d90..d47929e 100644
--- a/rust/test/shared/nested_types_test.rs
+++ b/rust/test/shared/nested_types_test.rs
@@ -9,15 +9,15 @@
 
 #[test]
 fn test_nested_messages_accessible() {
-    let _parent: unittest_proto::TestAllTypes;
-    let _child: unittest_proto::test_all_types::NestedMessage;
-    unittest_proto::test_child_extension_data::
+    let _parent: unittest_rust_proto::TestAllTypes;
+    let _child: unittest_rust_proto::test_all_types::NestedMessage;
+    unittest_rust_proto::test_child_extension_data::
     nested_test_all_extensions_data::NestedDynamicExtensions::new();
 }
 
 #[test]
 fn test_nested_enums_accessible() {
-    let _parent: unittest_proto::TestAllTypes;
-    let _child: unittest_proto::test_all_types::NestedEnum;
-    unittest_proto::test_dynamic_extensions::DynamicEnumType::default();
+    let _parent: unittest_rust_proto::TestAllTypes;
+    let _child: unittest_rust_proto::test_all_types::NestedEnum;
+    unittest_rust_proto::test_dynamic_extensions::DynamicEnumType::default();
 }
diff --git a/rust/test/shared/package_test.rs b/rust/test/shared/package_test.rs
index 4c9d748..04f5b84 100644
--- a/rust/test/shared/package_test.rs
+++ b/rust/test/shared/package_test.rs
@@ -10,37 +10,37 @@
 #[test]
 fn test_message_packages() {
     // empty package, message declared in the first .proto source
-    let _: no_package_proto::MsgWithoutPackage;
+    let _: no_package_rust_proto::MsgWithoutPackage;
     // empty package, message declared in other .proto source
-    let _: no_package_proto::OtherMsgWithoutPackage;
+    let _: no_package_rust_proto::OtherMsgWithoutPackage;
     // empty package, import public of a message
-    let _: no_package_proto::ImportedMsgWithoutPackage;
+    let _: no_package_rust_proto::ImportedMsgWithoutPackage;
 
     // package, message declared in the first .proto source
-    let _: package_proto::MsgWithPackage;
+    let _: package_rust_proto::MsgWithPackage;
     // package, message declared in the other .proto source with the same package
-    let _: package_proto::OtherMsgWithPackage;
+    let _: package_rust_proto::OtherMsgWithPackage;
     // package, message declared in the other .proto source with a different package
-    let _: package_proto::OtherMsgInDifferentPackage;
+    let _: package_rust_proto::OtherMsgInDifferentPackage;
     // package, import public of a message
-    let _: package_proto::ImportedMsgWithPackage;
+    let _: package_rust_proto::ImportedMsgWithPackage;
 }
 
 #[test]
 fn test_enum_packages() {
     // empty package, enum declared in the first .proto source
-    let _: no_package_proto::EnumWithoutPackage;
+    let _: no_package_rust_proto::EnumWithoutPackage;
     // empty package, enum declared in other .proto source
-    let _: no_package_proto::OtherEnumWithoutPackage;
+    let _: no_package_rust_proto::OtherEnumWithoutPackage;
     // empty package, import public of a enum
-    let _: no_package_proto::ImportedEnumWithoutPackage;
+    let _: no_package_rust_proto::ImportedEnumWithoutPackage;
 
     // package, enum declared in the first .proto source
-    let _: package_proto::EnumWithPackage;
+    let _: package_rust_proto::EnumWithPackage;
     // package, enum declared in the other .proto source with the same package
-    let _: package_proto::OtherEnumWithPackage;
+    let _: package_rust_proto::OtherEnumWithPackage;
     // package, enum declared in the other .proto source with a different package
-    let _: package_proto::OtherEnumInDifferentPackage;
+    let _: package_rust_proto::OtherEnumInDifferentPackage;
     // package, import public of a enum
-    let _: package_proto::ImportedEnumWithPackage;
+    let _: package_rust_proto::ImportedEnumWithPackage;
 }
diff --git a/rust/test/shared/proto_macro_test.rs b/rust/test/shared/proto_macro_test.rs
index 9bf7c9a..c7865cb 100644
--- a/rust/test/shared/proto_macro_test.rs
+++ b/rust/test/shared/proto_macro_test.rs
@@ -9,7 +9,7 @@
 
 use googletest::prelude::*;
 use protobuf::proto;
-use unittest_proto::{
+use unittest_rust_proto::{
     test_all_types::{self, NestedMessage},
     NestedTestAllTypes, TestAllTypes,
 };
@@ -100,8 +100,8 @@
 
     // empty nested message should be present
     // make sure that qualified path names work
-    let msg = proto!(::unittest_proto::TestAllTypes {
-        optional_nested_message: unittest_proto::test_all_types::NestedMessage {}
+    let msg = proto!(::unittest_rust_proto::TestAllTypes {
+        optional_nested_message: unittest_rust_proto::test_all_types::NestedMessage {}
     });
     assert_that!(msg.has_optional_nested_message(), eq(true));
 }
diff --git a/rust/test/shared/reserved_crate_name_test.rs b/rust/test/shared/reserved_crate_name_test.rs
deleted file mode 100644
index 95f63ef..0000000
--- a/rust/test/shared/reserved_crate_name_test.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2024 Google LLC.  All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-use r#struct::Foo;
-
-#[test]
-fn test_new() {
-    let _ = Foo::new();
-}
diff --git a/rust/test/shared/serialization_test.rs b/rust/test/shared/serialization_test.rs
index 7f9a510..436823b 100644
--- a/rust/test/shared/serialization_test.rs
+++ b/rust/test/shared/serialization_test.rs
@@ -6,7 +6,7 @@
 // https://developers.google.com/open-source/licenses/bsd
 
 use googletest::prelude::*;
-use unittest_proto::TestAllTypes;
+use unittest_rust_proto::TestAllTypes;
 
 #[test]
 fn serialize_zero_length() {
diff --git a/rust/test/shared/simple_nested_test.rs b/rust/test/shared/simple_nested_test.rs
index 73c4e00..fe74786 100644
--- a/rust/test/shared/simple_nested_test.rs
+++ b/rust/test/shared/simple_nested_test.rs
@@ -6,9 +6,9 @@
 // https://developers.google.com/open-source/licenses/bsd
 
 use googletest::prelude::*;
-use nested_proto::outer::inner::InnerEnum;
-use nested_proto::outer::InnerView;
-use nested_proto::*;
+use nested_rust_proto::outer::inner::InnerEnum;
+use nested_rust_proto::outer::InnerView;
+use nested_rust_proto::*;
 
 #[test]
 fn test_deeply_nested_message() {
@@ -89,7 +89,7 @@
 
 #[test]
 fn test_recursive_view() {
-    let rec = nested_proto::Recursive::new();
+    let rec = nested_rust_proto::Recursive::new();
     assert_that!(rec.num(), eq(0));
     assert_that!(rec.rec().num(), eq(0));
     assert_that!(rec.rec().rec().num(), eq(0)); // turtles all the way down...
@@ -102,7 +102,7 @@
 
 #[test]
 fn test_recursive_mut() {
-    let mut rec = nested_proto::Recursive::new();
+    let mut rec = nested_rust_proto::Recursive::new();
     let mut one = rec.rec_mut();
     let mut two = one.rec_mut();
     let mut three = two.rec_mut();
diff --git a/rust/test/shared/utf8/BUILD b/rust/test/shared/utf8/BUILD
index 7ff1551..8d09729 100644
--- a/rust/test/shared/utf8/BUILD
+++ b/rust/test/shared/utf8/BUILD
@@ -11,9 +11,9 @@
         "//rust:protobuf_cpp": "protobuf",
     },
     deps = [
-        ":feature_verify_cc_rust_proto",
-        ":no_features_proto2_cc_rust_proto",
-        ":no_features_proto3_cc_rust_proto",
+        ":feature_verify_cpp_rust_proto",
+        ":no_features_proto2_cpp_rust_proto",
+        ":no_features_proto3_cpp_rust_proto",
         "//rust:protobuf_cpp",
         "@crate_index//:googletest",
     ],
@@ -93,16 +93,16 @@
 )
 
 rust_cc_proto_library(
-    name = "no_features_proto2_cc_rust_proto",
+    name = "no_features_proto2_cpp_rust_proto",
     deps = [":no_features_proto2_proto"],
 )
 
 rust_cc_proto_library(
-    name = "no_features_proto3_cc_rust_proto",
+    name = "no_features_proto3_cpp_rust_proto",
     deps = [":no_features_proto3_proto"],
 )
 
 rust_cc_proto_library(
-    name = "feature_verify_cc_rust_proto",
+    name = "feature_verify_cpp_rust_proto",
     deps = [":feature_verify_proto"],
 )
diff --git a/rust/test/shared/utf8/utf8_test.rs b/rust/test/shared/utf8/utf8_test.rs
index 746ca8c..ed5da95 100644
--- a/rust/test/shared/utf8/utf8_test.rs
+++ b/rust/test/shared/utf8/utf8_test.rs
@@ -13,10 +13,10 @@
 // behavior. Do not assume that the Protobuf team is intentional about these
 // behaviors while b/304774814 is open.
 
-use feature_verify_proto::Verify;
+use feature_verify_rust_proto::Verify;
 use googletest::prelude::*;
-use no_features_proto2_proto::NoFeaturesProto2;
-use no_features_proto3_proto::NoFeaturesProto3;
+use no_features_proto2_rust_proto::NoFeaturesProto2;
+use no_features_proto3_rust_proto::NoFeaturesProto3;
 use protobuf::{ParseError, ProtoStr};
 
 // We use 0b1000_0000, since 0b1XXX_XXXX in UTF-8 denotes a byte 2-4, but never
diff --git a/rust/test/struct.proto b/rust/test/struct.proto
deleted file mode 100644
index 494c363..0000000
--- a/rust/test/struct.proto
+++ /dev/null
@@ -1,18 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2024 Google LLC.  All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd
-
-// The contents of this file has no purpose. This file is used in a
-// proto_library named 'struct' to test that crate names of reserved keywords
-// are escaped correctly.
-
-syntax = "proto2";
-
-package main;
-
-message Foo {
-  optional int32 a = 1;
-}