Implement SettableValue[u8] for SerializedData

PiperOrigin-RevId: 592547207
pull/15148/head
Protobuf Team Bot 1 year ago committed by Copybara-Service
parent 95ff734d6b
commit c288343d01
  1. 11
      rust/cpp.rs
  2. 10
      rust/test/shared/serialization_test.rs
  3. 13
      rust/upb.rs

@ -9,7 +9,7 @@
use crate::ProtoStr;
use crate::__internal::{Private, PtrAndLen, RawArena, RawMap, RawMessage, RawRepeatedField};
use crate::{Mut, Proxied, ProxiedInRepeated, Repeated, View};
use crate::{Mut, Proxied, ProxiedInRepeated, Repeated, SettableValue, View};
use core::fmt::Debug;
use paste::paste;
use std::alloc::Layout;
@ -139,6 +139,15 @@ impl fmt::Debug for SerializedData {
}
}
impl SettableValue<[u8]> for SerializedData {
fn set_on<'msg>(self, _private: Private, mut mutator: Mut<'msg, [u8]>)
where
[u8]: 'msg,
{
mutator.set(self.as_ref())
}
}
pub type BytesPresentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type BytesAbsentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type InnerBytesMut<'msg> = crate::vtable::RawVTableMutator<'msg, [u8]>;

@ -37,3 +37,13 @@ fn deserialize_error() {
let data = b"not a serialized proto";
assert!(msg.deserialize(&*data).is_err());
}
#[test]
fn set_bytes_with_serialized_data() {
let mut msg = TestAllTypes::new();
msg.optional_int64_mut().set(42);
msg.optional_bool_mut().set(true);
let mut msg2 = TestAllTypes::new();
msg2.optional_bytes_mut().set(msg.serialize());
assert_that!(msg2.optional_bytes(), eq(msg.serialize().as_ref()));
}

@ -7,10 +7,10 @@
//! UPB FFI wrapper code for use by Rust Protobuf.
use crate::ProtoStr;
use crate::__internal::{Private, PtrAndLen, RawArena, RawMap, RawMessage, RawRepeatedField};
use crate::{
Mut, Proxied, ProxiedInRepeated, Repeated, RepeatedMut, RepeatedView, View, ViewProxy,
Mut, ProtoStr, Proxied, ProxiedInRepeated, Repeated, RepeatedMut, RepeatedView, SettableValue,
View, ViewProxy,
};
use core::fmt::Debug;
use paste::paste;
@ -217,6 +217,15 @@ impl fmt::Debug for SerializedData {
}
}
impl SettableValue<[u8]> for SerializedData {
fn set_on<'msg>(self, _private: Private, mut mutator: Mut<'msg, [u8]>)
where
[u8]: 'msg,
{
mutator.set(self.as_ref())
}
}
// TODO: Investigate replacing this with direct access to UPB bits.
pub type BytesPresentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;
pub type BytesAbsentMutData<'msg> = crate::vtable::RawVTableOptionalMutatorData<'msg, [u8]>;

Loading…
Cancel
Save