diff options
author | monster <monster@ydb.tech> | 2022-07-07 14:41:37 +0300 |
---|---|---|
committer | monster <monster@ydb.tech> | 2022-07-07 14:41:37 +0300 |
commit | 06e5c21a835c0e923506c4ff27929f34e00761c2 (patch) | |
tree | 75efcbc6854ef9bd476eb8bf00cc5c900da436a2 /contrib/libs/protobuf-mutator/src/text_format.cc | |
parent | 03f024c4412e3aa613bb543cf1660176320ba8f4 (diff) | |
download | ydb-06e5c21a835c0e923506c4ff27929f34e00761c2.tar.gz |
fix ya.make
Diffstat (limited to 'contrib/libs/protobuf-mutator/src/text_format.cc')
-rw-r--r-- | contrib/libs/protobuf-mutator/src/text_format.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/contrib/libs/protobuf-mutator/src/text_format.cc b/contrib/libs/protobuf-mutator/src/text_format.cc new file mode 100644 index 0000000000..d8a8342b19 --- /dev/null +++ b/contrib/libs/protobuf-mutator/src/text_format.cc @@ -0,0 +1,57 @@ +// Copyright 2017 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "src/text_format.h" + +#include "port/protobuf.h" + +namespace protobuf_mutator { + +using protobuf::Message; +using protobuf::TextFormat; + +bool ParseTextMessage(const uint8_t* data, size_t size, Message* output) { + return ParseTextMessage({reinterpret_cast<const char*>(data), size}, output); +} + +bool ParseTextMessage(const TProtoStringType& data, protobuf::Message* output) { + output->Clear(); + TextFormat::Parser parser; + parser.SetRecursionLimit(100); + parser.AllowPartialMessage(true); + parser.AllowUnknownField(true); + if (!parser.ParseFromString(data, output)) { + output->Clear(); + return false; + } + return true; +} + +size_t SaveMessageAsText(const Message& message, uint8_t* data, + size_t max_size) { + TProtoStringType result = SaveMessageAsText(message); + if (result.size() <= max_size) { + memcpy(data, result.data(), result.size()); + return result.size(); + } + return 0; +} + +TProtoStringType SaveMessageAsText(const protobuf::Message& message) { + String tmp; + if (!protobuf::TextFormat::PrintToString(message, &tmp)) return {}; + return tmp; +} + +} // namespace protobuf_mutator |