using google::protobuf::Descriptor;
using google::protobuf::FieldDescriptor;
using google::protobuf::EnumDescriptor;
using google::protobuf::EnumValueDescriptor;
const Descriptor* descriptor = message.GetDescriptor();
for (int i = 0; i < descriptor->field_count(); i++) {
const FieldDescriptor* field = descriptor->field(i);
if (field->type() == FieldDescriptor::TYPE_ENUM) {
// this is an enum field.
const EnumDescriptor* type = field->enum_type();
for (int j = 0; j < type->value_count(); j++) {
const EnumValueDescriptor* value = type->value(i);
// value->name() and value->number() describe this value.