Thanks. This worked for me. Full code is as below.
outField = outModDesc->FindFieldByName(tmp_name);
const google::protobuf::Descriptor* tmpDesc = outField->message_type();
std::string subMsgType = tmpDesc->name();
std::string subFullMsgType = tmpDesc->full_name();
std::cout << " Type:" << subMsgType
<< "new Type" << newMsgType << std::endl;
Output:
========
Type:ConfigMsg
Full Type:frrcfg.ConfigMsg
Thanks,
Kiran.
On Tuesday, May 21, 2019 at 4:31:50 PM UTC-7, Ilia Mirkin wrote:
>
> You can get the ->message_type() (assuming the ->type() is
> TYPE_MESSAGE), which gets you a Descriptor which in turn has a
> ->name() / ->full_name() function.
>
> Cheers,
>
> -ilia
>
> On Tue, May 21, 2019 at 7:13 PM Kiran Kumar <[email protected]
> <javascript:>> wrote:
> >
> > 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] <javascript:>.
> > To post to this group, send email to [email protected]
> <javascript:>.
> > 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.
>
--
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/9a34c314-a5d8-43df-945f-028a87d7c5fd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.