| #include <fstream> |
| #include <google/protobuf/descriptor.pb.h> |
| #include <iostream> |
| #include <string> |
| |
| #include <google/protobuf/descriptor.h> |
| #include <google/protobuf/dynamic_message.h> |
| #include <google/protobuf/text_format.h> |
| |
| int main(int argc, char* argv[]) |
| { |
| std::ifstream fs; |
| fs.open(argv[1], std::ifstream::in); |
| google::protobuf::FileDescriptorSet file_descriptor_set; |
| file_descriptor_set.ParseFromIstream(&fs); |
| |
| const google::protobuf::DescriptorPool* compiled_pool = |
| google::protobuf::DescriptorPool::generated_pool(); |
| |
| if (compiled_pool == NULL) { |
| std::cerr << "compiled pool is NULL." << std::endl; |
| return 1; |
| } |
| |
| google::protobuf::DescriptorPool pool(compiled_pool); |
| google::protobuf::DynamicMessageFactory dynamic_message_factory(&pool); |
| |
| for (const google::protobuf::FileDescriptorProto& file_descriptor_proto : |
| file_descriptor_set.file()) { |
| const google::protobuf::FileDescriptor* file_descriptor = |
| pool.BuildFile(file_descriptor_proto); |
| if (file_descriptor == NULL) { |
| continue; |
| } |
| |
| const google::protobuf::Descriptor* descriptor = |
| pool.FindMessageTypeByName("example.msgs.ExampleDesc"); |
| |
| if (descriptor == NULL) { |
| continue; |
| } |
| |
| google::protobuf::Message* msg = |
| dynamic_message_factory.GetPrototype(descriptor)->New(); |
| std::string data = "data: 1"; |
| bool success = google::protobuf::TextFormat::ParseFromString(data, msg); |
| |
| if (success) { |
| return 0; |
| } else { |
| std::cerr << "Failed to parse message." << std::endl; |
| return 2; |
| } |
| } |
| |
| std::cerr << "No matching message found." << std::endl; |
| return 3; |
| } |