aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgritukan <gritukan@yandex-team.com>2023-08-07 19:35:14 +0300
committergritukan <gritukan@yandex-team.com>2023-08-07 21:40:00 +0300
commit2a7d26c691d3f5c8f056443dd190679bcc293f84 (patch)
tree83b79f1c14834a1c754fecee032eebabe88fba91
parent866f851bde92571470f8571508374e927e3b58c8 (diff)
downloadydb-2a7d26c691d3f5c8f056443dd190679bcc293f84.tar.gz
YT-19686: Introduce efficient proto conversions for TStringBuf
-rw-r--r--yt/yt/core/misc/protobuf_helpers-inl.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/yt/yt/core/misc/protobuf_helpers-inl.h b/yt/yt/core/misc/protobuf_helpers-inl.h
index 22c90e4ed5..93b4b362e7 100644
--- a/yt/yt/core/misc/protobuf_helpers-inl.h
+++ b/yt/yt/core/misc/protobuf_helpers-inl.h
@@ -65,6 +65,33 @@ inline void FromProto(TString* original, std::string serialized)
////////////////////////////////////////////////////////////////////////////////
+// These conversions work in case if the patched protobuf that uses
+// TString is used.
+inline void ToProto(TString* serialized, TStringBuf original)
+{
+ *serialized = original;
+}
+
+inline void FromProto(TStringBuf* original, const TString& serialized)
+{
+ *original = serialized;
+}
+
+// These conversions work in case if the original protobuf that uses
+// std::string is used.
+inline void ToProto(std::string* serialized, TStringBuf original)
+{
+ serialized->resize(original.size());
+ memcpy(serialized->data(), original.data(), original.size());
+}
+
+inline void FromProto(TStringBuf* original, const std::string& serialized)
+{
+ *original = serialized;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
inline void ToProto(::google::protobuf::int64* serialized, TDuration original)
{
*serialized = original.MicroSeconds();