Skip to content

Commit b2a08a1

Browse files
author
ignat
committed
Support ToProto/FromProto for protobuf map
commit_hash:b1ed324e2b774c388cc76403e9970975d5561717
1 parent 2add2ae commit b2a08a1

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

yt/yt/core/misc/protobuf_helpers-inl.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,17 @@ void ToProto(
479479
NYT::NDetail::ToProtoArrayImpl(serializedArray, originalArray);
480480
}
481481

482+
template <class TKey, class TValue, class TSerializedKey, class TSerializedValue>
483+
void ToProto(
484+
::google::protobuf::Map<TSerializedKey, TSerializedValue>* serializedMap,
485+
const THashMap<TKey, TValue>& originalMap)
486+
{
487+
serializedMap->clear();
488+
for (const auto& [key, value] : originalMap) {
489+
serializedMap->insert(std::pair(ToProto<TSerializedKey>(key), ToProto<TSerializedValue>(value)));
490+
}
491+
}
492+
482493
template <class TOriginalArray, class TSerialized, class... TArgs>
483494
void FromProto(
484495
TOriginalArray* originalArray,
@@ -515,6 +526,19 @@ void CheckedHashSetFromProto(
515526

516527
////////////////////////////////////////////////////////////////////////////////
517528

529+
template <class TKey, class TValue, class TSerializedKey, class TSerializedValue>
530+
void FromProto(
531+
THashMap<TKey, TValue>* originalMap,
532+
const ::google::protobuf::Map<TSerializedKey, TSerializedValue>& serializedMap)
533+
{
534+
originalMap->clear();
535+
for (const auto& [serializedKey, serializedValue] : serializedMap) {
536+
EmplaceOrCrash(*originalMap, FromProto<TKey>(serializedKey), FromProto<TValue>(serializedValue));
537+
}
538+
}
539+
540+
////////////////////////////////////////////////////////////////////////////////
541+
518542
template <class TSerialized, NYT::NDetail::CToProtoOriginal TOriginal, class... TArgs>
519543
auto ToProto(const TOriginal& original, TArgs&&... args)
520544
{

yt/yt/core/misc/protobuf_helpers.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ void ToProto(
123123
::google::protobuf::RepeatedField<TSerialized>* serializedArray,
124124
const TOriginalArray& originalArray);
125125

126+
template <class TKey, class TValue, class TSerializedKey, class TSerializedValue>
127+
void ToProto(
128+
::google::protobuf::Map<TSerializedKey, TSerializedValue>* serializedMap,
129+
const THashMap<TKey, TValue>& originalMap);
130+
126131
template <class TOriginalArray, class TSerialized, class... TArgs>
127132
void FromProto(
128133
TOriginalArray* originalArray,
@@ -144,6 +149,11 @@ void CheckedHashSetFromProto(
144149
THashSet<TOriginal>* originalHashSet,
145150
const ::google::protobuf::RepeatedField<TSerialized>& serializedHashSet);
146151

152+
template <class TKey, class TValue, class TSerializedKey, class TSerializedValue>
153+
void FromProto(
154+
THashMap<TKey, TValue>* originalMap,
155+
const ::google::protobuf::Map<TSerializedKey, TSerializedValue>& serializedMap);
156+
147157
////////////////////////////////////////////////////////////////////////////////
148158

149159
template <class TSerialized, class T, class TTag>

0 commit comments

Comments
 (0)