OR-Tools  9.1
port/proto_utils.h
Go to the documentation of this file.
1 // Copyright 2010-2021 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 #ifndef OR_TOOLS_PORT_PROTO_UTILS_H_
15 #define OR_TOOLS_PORT_PROTO_UTILS_H_
16 
17 #include <string>
18 
19 #if !defined(__PORTABLE_PLATFORM__)
20 #include "google/protobuf/descriptor.h"
21 #include "google/protobuf/text_format.h"
22 #endif // !defined(__PORTABLE_PLATFORM__)
23 
24 #include "absl/strings/str_cat.h"
25 
26 namespace operations_research {
27 template <class P>
28 std::string ProtobufDebugString(const P& message) {
29 #if defined(__PORTABLE_PLATFORM__)
30  return message.GetTypeName();
31 #else // defined(__PORTABLE_PLATFORM__)
32  return message.DebugString();
33 #endif // !defined(__PORTABLE_PLATFORM__)
34 }
35 
36 template <class P>
37 std::string ProtobufShortDebugString(const P& message) {
38 #if defined(__PORTABLE_PLATFORM__)
39  return message.GetTypeName();
40 #else // defined(__PORTABLE_PLATFORM__)
41  return message.ShortDebugString();
42 #endif // !defined(__PORTABLE_PLATFORM__)
43 }
44 
45 template <typename ProtoEnumType>
46 std::string ProtoEnumToString(ProtoEnumType enum_value) {
47 #if defined(__PORTABLE_PLATFORM__)
48  return absl::StrCat(enum_value);
49 #else // defined(__PORTABLE_PLATFORM__)
50  auto enum_descriptor = google::protobuf::GetEnumDescriptor<ProtoEnumType>();
51  auto enum_value_descriptor = enum_descriptor->FindValueByNumber(enum_value);
52  if (enum_value_descriptor == nullptr) {
53  return absl::StrCat(
54  "Invalid enum value of: ", enum_value, " for enum type: ",
55  google::protobuf::GetEnumDescriptor<ProtoEnumType>()->name());
56  }
57  return enum_value_descriptor->name();
58 #endif // !defined(__PORTABLE_PLATFORM__)
59 }
60 
61 template <typename ProtoType>
62 bool ProtobufTextFormatMergeFromString(const std::string& proto_text_string,
63  ProtoType* proto) {
64 #if defined(__PORTABLE_PLATFORM__)
65  return false;
66 #else // defined(__PORTABLE_PLATFORM__)
67  return google::protobuf::TextFormat::MergeFromString(proto_text_string,
68  proto);
69 #endif // !defined(__PORTABLE_PLATFORM__)
70 }
71 
72 } // namespace operations_research
73 
74 #endif // OR_TOOLS_PORT_PROTO_UTILS_H_
const std::string name
bool ProtobufTextFormatMergeFromString(const std::string &proto_text_string, ProtoType *proto)
std::string ProtobufDebugString(const P &message)
CpModelProto proto
std::string ProtoEnumToString(ProtoEnumType enum_value)
std::string message
Definition: trace.cc:398
std::string ProtobufShortDebugString(const P &message)
Collection of objects used to extend the Constraint Solver library.