|  | /* | 
|  | * Copyright (C) 2021 The Android Open Source Project | 
|  | * | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | #ifndef TOOLS_PROTO_MERGER_PROTO_FILE_H_ | 
|  | #define TOOLS_PROTO_MERGER_PROTO_FILE_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | // We include this intentionally instead of forward declaring to allow | 
|  | // for an easy find/replace transformation when moving to Google3. | 
|  | #include <google/protobuf/descriptor.h> | 
|  |  | 
|  | namespace perfetto { | 
|  | namespace proto_merger { | 
|  |  | 
|  | /// Simplified representation of the coomponents of a .proto file. | 
|  | struct ProtoFile { | 
|  | struct Option { | 
|  | std::string key; | 
|  | std::string value; | 
|  | }; | 
|  | struct Member { | 
|  | std::vector<std::string> leading_comments; | 
|  | std::vector<std::string> trailing_comments; | 
|  | }; | 
|  | struct Enum : Member { | 
|  | struct Value : Member { | 
|  | std::string name; | 
|  | int number; | 
|  | std::vector<Option> options; | 
|  | }; | 
|  | std::string name; | 
|  | std::vector<Value> values; | 
|  |  | 
|  | std::vector<Value> deleted_values; | 
|  | }; | 
|  | struct Field : Member { | 
|  | std::string label; | 
|  | std::string packageless_type; | 
|  | std::string type; | 
|  | std::string name; | 
|  | int number; | 
|  | std::vector<Option> options; | 
|  | }; | 
|  | struct Oneof : Member { | 
|  | std::string name; | 
|  | std::vector<Field> fields; | 
|  |  | 
|  | std::vector<Field> deleted_fields; | 
|  | }; | 
|  | struct Message : Member { | 
|  | std::string name; | 
|  | std::vector<Enum> enums; | 
|  | std::vector<Message> nested_messages; | 
|  | std::vector<Oneof> oneofs; | 
|  | std::vector<Field> fields; | 
|  |  | 
|  | std::vector<Enum> deleted_enums; | 
|  | std::vector<Message> deleted_nested_messages; | 
|  | std::vector<Oneof> deleted_oneofs; | 
|  | std::vector<Field> deleted_fields; | 
|  | }; | 
|  |  | 
|  | std::vector<Message> messages; | 
|  | std::vector<Enum> enums; | 
|  |  | 
|  | std::vector<Message> deleted_messages; | 
|  | std::vector<Enum> deleted_enums; | 
|  | }; | 
|  |  | 
|  | // Creates a ProtoFile struct from a libprotobuf-full descriptor clas. | 
|  | ProtoFile ProtoFileFromDescriptor(const google::protobuf::FileDescriptor&); | 
|  |  | 
|  | }  // namespace proto_merger | 
|  | }  // namespace perfetto | 
|  |  | 
|  | #endif  // TOOLS_PROTO_MERGER_PROTO_FILE_H_ |