diff --git a/test-crates/protobuf-codegen-protoc-test/src/common/v2/test_reflect_map.rs b/test-crates/protobuf-codegen-protoc-test/src/common/v2/test_reflect_map.rs new file mode 100644 index 000000000..25d48ab1d --- /dev/null +++ b/test-crates/protobuf-codegen-protoc-test/src/common/v2/test_reflect_map.rs @@ -0,0 +1,31 @@ +use protobuf::reflect::ReflectValueBox; +use protobuf::MessageFull; + +use super::test_reflect_map_pb::TestMap; + +#[test] +fn test_map() { + let mut message = TestMap::new(); + message + .map_string_string + .insert("foo".to_owned(), "bar".to_owned()); + message.map_int32_bool.insert(1, true); + + let map_string_string = TestMap::descriptor() + .field_by_name("map_string_string") + .unwrap(); + let map_int32_bool = TestMap::descriptor() + .field_by_name("map_int32_bool") + .unwrap(); + + let mut reflect_message = TestMap::descriptor().new_instance(); + map_string_string.mut_map(&mut *reflect_message).insert( + ReflectValueBox::String("foo".to_owned()), + ReflectValueBox::String("bar".to_owned()), + ); + map_int32_bool + .mut_map(&mut *reflect_message) + .insert(ReflectValueBox::I32(1), ReflectValueBox::Bool(true)); + + assert!(TestMap::descriptor().eq(&message, &*reflect_message)); +} diff --git a/test-crates/protobuf-codegen-protoc-test/src/common/v2/test_reflect_map_pb.proto b/test-crates/protobuf-codegen-protoc-test/src/common/v2/test_reflect_map_pb.proto new file mode 100644 index 000000000..45e40b95d --- /dev/null +++ b/test-crates/protobuf-codegen-protoc-test/src/common/v2/test_reflect_map_pb.proto @@ -0,0 +1,9 @@ +syntax = "proto2"; + +import "rustproto.proto"; +option (rustproto.generate_accessors_all) = true; + +message TestMap { + map map_string_string = 1; + map map_int32_bool = 2; +}