MessageField.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include <glog/logging.h>
  2. #include "Orm/MessageField.h"
  3. namespace Egametang {
  4. MessageField::MessageField(
  5. const google::protobuf::Message& message,
  6. const google::protobuf::FieldDescriptor* field):
  7. message(message), field(field)
  8. {
  9. }
  10. MessageField::~MessageField()
  11. {
  12. }
  13. std::string MessageField::ValueToString()
  14. {
  15. const google::protobuf::Reflection* reflection = message.GetReflection();
  16. google::protobuf::FieldDescriptor::Type type = field->type();
  17. std::string valueStr = "";
  18. switch (type)
  19. {
  20. case google::protobuf::FieldDescriptor::TYPE_BOOL:
  21. {
  22. bool value = reflection->GetBool(message, field);
  23. valueStr = value? "1" : "0";
  24. break;
  25. }
  26. case google::protobuf::FieldDescriptor::TYPE_DOUBLE:
  27. {
  28. double value = reflection->GetDouble(message, field);
  29. valueStr = boost::lexical_cast<std::string>(value);
  30. break;
  31. }
  32. case google::protobuf::FieldDescriptor::TYPE_INT32:
  33. {
  34. int32 value = reflection->GetInt32(message, field);
  35. valueStr = boost::lexical_cast<std::string>(value);
  36. break;
  37. }
  38. case google::protobuf::FieldDescriptor::TYPE_INT64:
  39. {
  40. int64 value = reflection->GetInt64(message, field);
  41. valueStr = boost::lexical_cast<std::string>(value);
  42. break;
  43. }
  44. case google::protobuf::FieldDescriptor::TYPE_UINT32:
  45. {
  46. uint32 value = reflection->GetUInt32(message, field);
  47. valueStr = boost::lexical_cast<std::string>(value);
  48. break;
  49. }
  50. case google::protobuf::FieldDescriptor::TYPE_UINT64:
  51. {
  52. uint64 value = reflection->GetUInt64(message, field);
  53. valueStr = boost::lexical_cast<std::string>(value);
  54. break;
  55. }
  56. case google::protobuf::FieldDescriptor::TYPE_STRING:
  57. {
  58. valueStr = "'" + reflection->GetString(message, field) + "'";
  59. break;
  60. }
  61. case google::protobuf::FieldDescriptor::TYPE_BYTES:
  62. {
  63. valueStr = "'" + reflection->GetString(message, field) + "'";
  64. break;
  65. }
  66. case google::protobuf::FieldDescriptor::TYPE_MESSAGE:
  67. {
  68. google::protobuf::Message& message = reflection->GetMessage(message, field);
  69. valueStr = "'" + message.SerializeAsString() + "'";
  70. break;
  71. }
  72. default:
  73. {
  74. LOG(FATAL) << "no such type";
  75. break;
  76. }
  77. }
  78. return valueStr;
  79. }
  80. } // namespace Egametang