Skip to content

Commit f72c45f

Browse files
Change .submsg_mut() to return $Msg$Mut instead of FieldEntry<$Msg$>.
PiperOrigin-RevId: 615849358
1 parent 958dd59 commit f72c45f

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

Diff for: rust/test/shared/accessors_test.rs

+8-9
Original file line numberDiff line numberDiff line change
@@ -524,36 +524,35 @@ fn test_message_opt_set() {
524524
assert_that!(msg.optional_nested_message_opt().is_set(), eq(true));
525525

526526
msg.clear_optional_nested_message();
527-
assert_that!(msg.optional_nested_message_mut().is_set(), eq(false));
527+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(false));
528528
}
529529

530530
#[test]
531531
fn test_setting_submsg() {
532532
let mut msg = TestAllTypes::new();
533533
let submsg = TestAllTypes_::NestedMessage::new();
534534

535-
let fieldentry = msg.optional_nested_message_mut();
536-
assert_that!(fieldentry.is_set(), eq(false));
535+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(false));
537536

538-
fieldentry.or_default().set(submsg);
537+
msg.set_optional_nested_message(submsg);
539538
// confirm that invoking .set on a submsg indeed flips the set bit
540-
assert_that!(msg.optional_nested_message_mut().is_set(), eq(true));
539+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(true));
541540

542541
msg.clear_optional_nested_message();
543-
assert_that!(msg.optional_nested_message_mut().is_set(), eq(false));
542+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(false));
544543
}
545544

546545
#[test]
547546
fn test_msg_or_default() {
548547
let mut msg = TestAllTypes::new();
549-
assert_that!(msg.optional_nested_message_mut().is_set(), eq(false));
548+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(false));
550549

551550
let _ = msg.optional_nested_message_mut().or_default();
552551
// confirm that that or_default makes the field Present
553-
assert_that!(msg.optional_nested_message_mut().is_set(), eq(true));
552+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(true));
554553

555554
msg.clear_optional_nested_message();
556-
assert_that!(msg.optional_nested_message_mut().is_set(), eq(false));
555+
assert_that!(msg.optional_nested_message_opt().is_set(), eq(false));
557556
}
558557

559558
#[test]

Diff for: src/google/protobuf/compiler/rust/accessors/singular_message.cc

+14-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,18 @@ void SingularMessage::InMsgImpl(Context& ctx, const FieldDescriptor& field,
7373
return;
7474
}
7575
ctx.Emit({}, R"rs(
76-
pub fn $raw_field_name$_mut(&mut self)
76+
pub fn $raw_field_name$_mut(&mut self) -> $msg_type$Mut<'_> {
77+
self.$raw_field_name$_entry().or_default()
78+
}
79+
)rs");
80+
}},
81+
{"private_getter_entry",
82+
[&] {
83+
if (accessor_case == AccessorCase::VIEW) {
84+
return;
85+
}
86+
ctx.Emit({}, R"rs(
87+
fn $raw_field_name$_entry(&mut self)
7788
-> $pb$::FieldEntry<'_, $msg_type$> {
7889
static VTABLE: $pbr$::MessageVTable =
7990
$pbr$::MessageVTable::new($pbi$::Private,
@@ -109,7 +120,7 @@ void SingularMessage::InMsgImpl(Context& ctx, const FieldDescriptor& field,
109120
pub fn set_$raw_field_name$(&mut self, val: impl $pb$::SettableValue<$msg_type$>) {
110121
//~ TODO: Optimize this to not go through the
111122
//~ FieldEntry.
112-
self.$raw_field_name$_mut().set(val);
123+
self.$raw_field_name$_entry().set(val);
113124
}
114125
)rs");
115126
}},
@@ -124,6 +135,7 @@ void SingularMessage::InMsgImpl(Context& ctx, const FieldDescriptor& field,
124135
R"rs(
125136
$getter$
126137
$getter_mut$
138+
$private_getter_entry$
127139
$getter_opt$
128140
$setter$
129141
$clearer$

Diff for: src/google/protobuf/compiler/rust/message.cc

+3
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,9 @@ void GenerateRs(Context& ctx, const Descriptor& msg) {
986986
Self{ inner: $pbr$::MutatorMessageRef::new(_private, msg) }
987987
}
988988
989+
#[deprecated = "This .or_default() is a no-op, usages can be safely removed"]
990+
pub fn or_default(self) -> Self { self }
991+
989992
fn raw_msg(&self) -> $pbi$::RawMessage {
990993
self.inner.msg()
991994
}

0 commit comments

Comments
 (0)