@@ -1123,37 +1123,34 @@ absl::StatusOr<RepeatedFieldAccessor> RepeatedFieldAccessorFor(
11231123
11241124namespace {
11251125
1126- // WellKnownTypesValueVisitor is the base visitor for `well_known_types::Value`
1127- // which handles the primitive values which require no special handling based on
1128- // allocators.
1129- struct WellKnownTypesValueVisitor {
1130- Value operator ()(std::nullptr_t ) const { return NullValue (); }
1126+ // Overloads for `well_known_types::Value` which handles the primitive values
1127+ // which require no special handling based on allocators.
1128+ Value VistWellKnownTypeValue (std::nullptr_t ) { return NullValue (); }
11311129
1132- Value operator ()( bool value) const { return BoolValue (value); }
1130+ Value VistWellKnownTypeValue ( bool value) { return BoolValue (value); }
11331131
1134- Value operator ()( int32_t value) const { return IntValue (value); }
1132+ Value VistWellKnownTypeValue ( int32_t value) { return IntValue (value); }
11351133
1136- Value operator ()( int64_t value) const { return IntValue (value); }
1134+ Value VistWellKnownTypeValue ( int64_t value) { return IntValue (value); }
11371135
1138- Value operator ()( uint32_t value) const { return UintValue (value); }
1136+ Value VistWellKnownTypeValue ( uint32_t value) { return UintValue (value); }
11391137
1140- Value operator ()( uint64_t value) const { return UintValue (value); }
1138+ Value VistWellKnownTypeValue ( uint64_t value) { return UintValue (value); }
11411139
1142- Value operator ()( float value) const { return DoubleValue (value); }
1140+ Value VistWellKnownTypeValue ( float value) { return DoubleValue (value); }
11431141
1144- Value operator ()( double value) const { return DoubleValue (value); }
1142+ Value VistWellKnownTypeValue ( double value) { return DoubleValue (value); }
11451143
1146- Value operator ()(absl::Duration value) const { return DurationValue (value); }
1144+ Value VistWellKnownTypeValue (absl::Duration value) {
1145+ return DurationValue (value);
1146+ }
11471147
1148- Value operator ()(absl::Time value) const { return TimestampValue (value); }
1149- };
1148+ Value VistWellKnownTypeValue (absl::Time value) { return TimestampValue (value); }
11501149
1151- struct OwningWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
1150+ struct OwningWellKnownTypesValueVisitor {
11521151 google::protobuf::Arena* absl_nullable arena;
11531152 std::string* absl_nonnull scratch;
11541153
1155- using WellKnownTypesValueVisitor::operator ();
1156-
11571154 Value operator ()(well_known_types::BytesValue&& value) const {
11581155 return absl::visit (absl::Overload (
11591156 [&](absl::string_view string) -> BytesValue {
@@ -1242,15 +1239,18 @@ struct OwningWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
12421239 }
12431240 return ParsedMessageValue (value.release (), arena);
12441241 }
1242+
1243+ template <typename T>
1244+ Value operator ()(T t) const {
1245+ return VistWellKnownTypeValue (t);
1246+ }
12451247};
12461248
1247- struct BorrowingWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
1249+ struct BorrowingWellKnownTypesValueVisitor {
12481250 const google::protobuf::Message* absl_nonnull message;
12491251 google::protobuf::Arena* absl_nonnull arena;
12501252 std::string* absl_nonnull scratch;
12511253
1252- using WellKnownTypesValueVisitor::operator ();
1253-
12541254 Value operator ()(well_known_types::BytesValue&& value) const {
12551255 return absl::visit (
12561256 absl::Overload (
@@ -1332,6 +1332,11 @@ struct BorrowingWellKnownTypesValueVisitor : public WellKnownTypesValueVisitor {
13321332 }
13331333 return ParsedMessageValue (value.release (), arena);
13341334 }
1335+
1336+ template <typename T>
1337+ Value operator ()(T t) const {
1338+ return VistWellKnownTypeValue (t);
1339+ }
13351340};
13361341
13371342} // namespace
@@ -1354,13 +1359,13 @@ Value Value::FromMessage(
13541359 return ErrorValue (std::move (status_or_adapted).status ());
13551360 }
13561361 return absl::visit (
1357- absl::Overload (
1358- OwningWellKnownTypesValueVisitor{ .arena = arena, .scratch = &scratch},
1359- [&](absl::monostate) -> Value {
1360- auto * cloned = message.New (arena);
1361- cloned->CopyFrom (message);
1362- return ParsedMessageValue (cloned, arena);
1363- }),
1362+ absl::Overload (OwningWellKnownTypesValueVisitor{
1363+ /* .arena = */ arena, /* .scratch = */ &scratch},
1364+ [&](absl::monostate) -> Value {
1365+ auto * cloned = message.New (arena);
1366+ cloned->CopyFrom (message);
1367+ return ParsedMessageValue (cloned, arena);
1368+ }),
13641369 std::move (status_or_adapted).value ());
13651370}
13661371
@@ -1382,13 +1387,13 @@ Value Value::FromMessage(
13821387 return ErrorValue (std::move (status_or_adapted).status ());
13831388 }
13841389 return absl::visit (
1385- absl::Overload (
1386- OwningWellKnownTypesValueVisitor{ .arena = arena, .scratch = &scratch},
1387- [&](absl::monostate) -> Value {
1388- auto * cloned = message.New (arena);
1389- cloned->GetReflection ()->Swap (cloned, &message);
1390- return ParsedMessageValue (cloned, arena);
1391- }),
1390+ absl::Overload (OwningWellKnownTypesValueVisitor{
1391+ /* .arena = */ arena, /* .scratch = */ &scratch},
1392+ [&](absl::monostate) -> Value {
1393+ auto * cloned = message.New (arena);
1394+ cloned->GetReflection ()->Swap (cloned, &message);
1395+ return ParsedMessageValue (cloned, arena);
1396+ }),
13921397 std::move (status_or_adapted).value ());
13931398}
13941399
@@ -1412,17 +1417,17 @@ Value Value::WrapMessage(
14121417 return ErrorValue (std::move (adapted_value).status ());
14131418 }
14141419 return absl::visit (
1415- absl::Overload (
1416- BorrowingWellKnownTypesValueVisitor{
1417- . message = message, . arena = arena, .scratch = &scratch},
1418- [&](absl::monostate) -> Value {
1419- if (message->GetArena () != arena) {
1420- auto * cloned = message->New (arena);
1421- cloned->CopyFrom (*message);
1422- return ParsedMessageValue (cloned, arena);
1423- }
1424- return ParsedMessageValue (message, arena);
1425- }),
1420+ absl::Overload (BorrowingWellKnownTypesValueVisitor{
1421+ /* .message = */ message, /* .arena = */ arena,
1422+ /* .scratch = */ &scratch},
1423+ [&](absl::monostate) -> Value {
1424+ if (message->GetArena () != arena) {
1425+ auto * cloned = message->New (arena);
1426+ cloned->CopyFrom (*message);
1427+ return ParsedMessageValue (cloned, arena);
1428+ }
1429+ return ParsedMessageValue (message, arena);
1430+ }),
14261431 std::move (adapted_value).value ());
14271432}
14281433
@@ -1446,15 +1451,15 @@ Value Value::WrapMessageUnsafe(
14461451 return ErrorValue (std::move (adapted_value).status ());
14471452 }
14481453 return absl::visit (
1449- absl::Overload (
1450- BorrowingWellKnownTypesValueVisitor{
1451- . message = message, . arena = arena, .scratch = &scratch},
1452- [&](absl::monostate) -> Value {
1453- if (message->GetArena () != arena) {
1454- return UnsafeParsedMessageValue (message);
1455- }
1456- return ParsedMessageValue (message, arena);
1457- }),
1454+ absl::Overload (BorrowingWellKnownTypesValueVisitor{
1455+ /* .message = */ message, /* .arena = */ arena,
1456+ /* .scratch = */ &scratch},
1457+ [&](absl::monostate) -> Value {
1458+ if (message->GetArena () != arena) {
1459+ return UnsafeParsedMessageValue (message);
1460+ }
1461+ return ParsedMessageValue (message, arena);
1462+ }),
14581463 std::move (adapted_value).value ());
14591464}
14601465
0 commit comments