I have protobuf messages defined as below. I need to find the message type
from the attribute name. For example, when the input is "cfgMsg" the output
should be ConfigMsg or CfgServerMsg.ConfigMsg (full name).
message CfgServerMsg {
string name = 1;
ConfigMsg cfgMsg = 2;}
message ConfigMsg {
string cfgName = 1;
uint32 msgId = 2;}
I have the below code. However, this is working for well defined types like
string, int, float etc. and for messages it just prints "message" as the
output.
I removed some code and presented only that is relevant to this question.
So this is obviously not the complete code.
google::protobuf::Message *modObj = new ModObj();
const google::protobuf::Descriptor *outModDesc
= modObj->GetDescriptor();
const Reflection *outModRefl = modObj->GetReflection();
const FieldDescriptor *field;
// Loop to iterate over all the fields{
field = outModDesc->FindFieldByName(tmp_name);
std::string type = field->type_name();
std::cout << "Type:" << type << std::endl;}
Output:
Type:string
Type:message
However, I want to get the actual message type which is "ConfigMsg" instead
of just "message". Is there any such API available from protobuf ?
I did check this page
https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.descriptor#FileDescriptor.name.details
thoroughly,
but couldn't find any thing useful for this.
If anyone has done similar thing or know some thing around this, it would
be useful.
Thanks,
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
To view this discussion on the web visit
https://groups.google.com/d/msgid/protobuf/68cf3dd3-8b5e-4f5c-8b87-b708b4e787da%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.