@@ -1551,6 +1551,9 @@ Value WrapFieldImpl(
15511551 if (string.data () == scratch.data () &&
15521552 string.size () == scratch.size ()) {
15531553 return StringValue (arena, std::move (scratch));
1554+ }
1555+ if constexpr (Unsafe::value) {
1556+ return StringValue::WrapUnsafe (string);
15541557 } else {
15551558 return StringValue (
15561559 Borrower::Arena (MessageArenaOr (message, arena)), string);
@@ -1586,6 +1589,9 @@ Value WrapFieldImpl(
15861589 if (string.data () == scratch.data () &&
15871590 string.size () == scratch.size ()) {
15881591 return BytesValue (arena, std::move (scratch));
1592+ }
1593+ if constexpr (Unsafe::value) {
1594+ return BytesValue::WrapUnsafe (string);
15891595 } else {
15901596 return BytesValue (
15911597 Borrower::Arena (MessageArenaOr (message, arena)), string);
@@ -1674,6 +1680,9 @@ Value WrapRepeatedFieldImpl(
16741680 if (string.data () == scratch.data () &&
16751681 string.size () == scratch.size ()) {
16761682 return StringValue (arena, std::move (scratch));
1683+ }
1684+ if constexpr (Unsafe::value) {
1685+ return StringValue::WrapUnsafe (string);
16771686 } else {
16781687 return StringValue (
16791688 Borrower::Arena (MessageArenaOr (message, arena)), string);
@@ -1705,6 +1714,9 @@ Value WrapRepeatedFieldImpl(
17051714 if (string.data () == scratch.data () &&
17061715 string.size () == scratch.size ()) {
17071716 return BytesValue (arena, std::move (scratch));
1717+ }
1718+ if constexpr (Unsafe::value) {
1719+ return BytesValue::WrapUnsafe (string);
17081720 } else {
17091721 return BytesValue (
17101722 Borrower::Arena (MessageArenaOr (message, arena)), string);
@@ -1774,8 +1786,12 @@ Value WrapMapFieldValueImpl(
17741786 case google::protobuf::FieldDescriptor::TYPE_BOOL:
17751787 return BoolValue (value.GetBoolValue ());
17761788 case google::protobuf::FieldDescriptor::TYPE_STRING:
1777- return StringValue (Borrower::Arena (MessageArenaOr (message, arena)),
1778- value.GetStringValue ());
1789+ if constexpr (Unsafe::value) {
1790+ return StringValue::WrapUnsafe (value.GetStringValue ());
1791+ } else {
1792+ return StringValue (Borrower::Arena (MessageArenaOr (message, arena)),
1793+ value.GetStringValue ());
1794+ }
17791795 case google::protobuf::FieldDescriptor::TYPE_GROUP:
17801796 ABSL_FALLTHROUGH_INTENDED;
17811797 case google::protobuf::FieldDescriptor::TYPE_MESSAGE:
@@ -1787,8 +1803,12 @@ Value WrapMapFieldValueImpl(
17871803 message_factory, arena);
17881804 }
17891805 case google::protobuf::FieldDescriptor::TYPE_BYTES:
1790- return BytesValue (Borrower::Arena (MessageArenaOr (message, arena)),
1791- value.GetStringValue ());
1806+ if constexpr (Unsafe::value) {
1807+ return BytesValue::WrapUnsafe (value.GetStringValue ());
1808+ } else {
1809+ return BytesValue (Borrower::Arena (MessageArenaOr (message, arena)),
1810+ value.GetStringValue ());
1811+ }
17921812 case google::protobuf::FieldDescriptor::TYPE_FIXED32:
17931813 ABSL_FALLTHROUGH_INTENDED;
17941814 case google::protobuf::FieldDescriptor::TYPE_UINT32:
0 commit comments