#include "thirdparty/google/protobuf/descriptor.h"
#include "thirdparty/google/protobuf/descriptor.pb.h"
#include "thirdparty/google/protobuf/dynamic_message.h"
#include "thirdparty/google/protobuf/compiler/importer.h"
#include "thirdparty/google/protobuf/message.h"
#include "common_test/protocolbuff/foo.pb.h"
#include <iostream>
#include <string>
using namespace std;
using namespace google::protobuf;
using namespace google::protobuf::compiler;
int main(int argc, char* argv[])
{
Foo foo;
foo.set_text("Hello World!");
foo.add_numbers(1);
foo.add_numbers(5);
foo.add_numbers(42);
const Descriptor* descriptor = foo.GetDescriptor();
const FieldDescriptor* text_field = descriptor->FindFieldByName("text");
assert(text_field != NULL);
assert(text_field->type() == FieldDescriptor::TYPE_STRING);
assert(text_field->label() == FieldDescriptor::LABEL_OPTIONAL);
const FieldDescriptor* numbers_field = descriptor->FindFieldByName("numbers");
assert(numbers_field != NULL);
assert(numbers_field->type() == FieldDescriptor::TYPE_INT32);
assert(numbers_field->label() == FieldDescriptor::LABEL_REPEATED);
const Reflection* reflection = foo.GetReflection();
cout << reflection->GetString(foo, text_field) << endl;
cout << reflection->FieldSize(foo, numbers_field) << endl;
cout << reflection->GetRepeatedInt32(foo, numbers_field, 0) << endl;
cout << reflection->GetRepeatedInt32(foo, numbers_field, 1) << endl;
cout << reflection->GetRepeatedInt32(foo, numbers_field, 2) << endl;
return 0;
}