Add submsg support for bytes_mut

message.cc:GetterForViewOrMut has been updated to support _mut for byte fields inside submsgs.

PiperOrigin-RevId: 590634540
pull/15063/head
Hong Shin 1 year ago committed by Copybara-Service
parent b19deb9275
commit 54d4839ecb
  1. 3
      rust/test/shared/simple_nested_test.rs
  2. 42
      src/google/protobuf/compiler/rust/message.cc

@ -81,6 +81,7 @@ fn test_nested_muts() {
})
);
assert_that!(inner_msg.string_mut().get(), eq(""));
assert_that!(inner_msg.bytes_mut().get(), eq(b""));
set_and_test_mut!(inner_msg =>
double_mut, 543.21;
@ -95,8 +96,8 @@ fn test_nested_muts() {
fixed64_mut, 999;
bool_mut, true;
string_mut, "hi";
bytes_mut, b"bye";
);
// TODO: add mutation test for bytes
}
#[test]

@ -258,17 +258,43 @@ void GetterForViewOrMut(Context<FieldDescriptor> field, bool is_mut) {
$maybe_mutator$
)rs");
} else if (fieldType == FieldDescriptor::TYPE_BYTES) {
field.Emit(
{
{"field", fieldName},
{"self", self},
{"getter_thunk", getter_thunk},
{"RsType", rsType},
},
R"rs(
field.Emit({{"field", fieldName},
{"self", self},
{"getter_thunk", getter_thunk},
{"setter_thunk", setter_thunk},
{"RsType", rsType},
{"maybe_mutator",
[&] {
if (is_mut) {
field.Emit({}, R"rs(
pub fn r#$field$_mut(&self) -> $pb$::Mut<'_, $RsType$> {
static VTABLE: $pbi$::BytesMutVTable =
$pbi$::BytesMutVTable::new(
$pbi$::Private,
$getter_thunk$,
$setter_thunk$,
);
unsafe {
<$pb$::Mut<$RsType$>>::from_inner(
$pbi$::Private,
$pbi$::RawVTableMutator::new(
$pbi$::Private,
self.inner,
&VTABLE,
)
)
}
}
)rs");
}
}}},
R"rs(
pub fn r#$field$(&self) -> $pb$::View<'_, $RsType$> {
unsafe { $getter_thunk$($self$).as_ref() }
}
$maybe_mutator$
)rs");
} else {
field.Emit({{"field", fieldName},

Loading…
Cancel
Save