Home | History | Annotate | Download | only in src
      1 // Copyright 2017 Google Inc. All rights reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #include "src/text_format.h"
     16 #include "port/protobuf.h"
     17 
     18 namespace protobuf_mutator {
     19 
     20 using protobuf::Message;
     21 using protobuf::TextFormat;
     22 
     23 bool ParseTextMessage(const uint8_t* data, size_t size, Message* output) {
     24   return ParseTextMessage({data, data + size}, output);
     25 }
     26 
     27 bool ParseTextMessage(const std::string& data, protobuf::Message* output) {
     28   output->Clear();
     29   TextFormat::Parser parser;
     30   parser.AllowPartialMessage(true);
     31   if (!parser.ParseFromString(data, output)) {
     32     output->Clear();
     33     return false;
     34   }
     35   return true;
     36 }
     37 
     38 size_t SaveMessageAsText(const Message& message, uint8_t* data,
     39                          size_t max_size) {
     40   std::string result = SaveMessageAsText(message);
     41   if (result.size() <= max_size) {
     42     memcpy(data, result.data(), result.size());
     43     return result.size();
     44   }
     45   return 0;
     46 }
     47 
     48 std::string SaveMessageAsText(const protobuf::Message& message) {
     49   String tmp;
     50   if (!protobuf::TextFormat::PrintToString(message, &tmp)) return {};
     51   return tmp;
     52 }
     53 
     54 }  // namespace protobuf_mutator
     55