The "why" is because the marshaller assumes the root is a message; however, you should look at "wrappers.proto" - there are well-known wrappers for single values of most common types, including string. Also, prefer "empty.proto" for empty, not your own.
On Sat, 29 Jun 2019 at 13:25, Ananya Bhat <[email protected]> wrote: > Hi, > I am new to protobuf. > I have question related to specifying partial messages as RPC parameters > and using scalar types in RPCs for returning simple strings > Why message wrappers are required? > Please clarify my doubts to decide better message specification > I have definition something like below > > Option A > > message Student > { > message Empty > { > } > > //Name of the Student > optional string name = 1; > // Year of Passing > optional string YOP = 2; > message Certificate > { > // Certificate name > optional string name = 1; > // Absolute location of the file on the disk > // e.g. C:\university\2019\ > optional string path = 2; > //strudent Identification code > optional string ID = 3; > // section e.g. "A", "B" > optional string section = 4; > // Certificate type > optional string type = 5; > } > optional Certificate cert = 3; > } > service StudentService > { > rpc getStudentName(Strudent.Empty) returns (Student); > rpc getCertificate(Student.Certificate) returns (Student.Certificate); > } > > alternatively > > Option B > > message Student > { > > //Name of the Student > optional string name = 1; > > message FilePath > { > optional string path = 1; > } > message Certificate > { > optional string name = 1; > optional Filepath path = 2; > //strudent Identification code > optional string ID = 3; > // section e.g. "A", "B" > optional string section = 4; > // Certificate type > optional string type = 5; > > } > optional Certificate cert = 2; > } > service StudentService > { > rpc getStudentName(Strudent.Empty) returns (Student); > rpc getCertificate(Student.Certificate.FilePath) returns > (Student.Certificate); > } > > In Option A, file path can not be specified to get the certificate. Full > message needs to be passed. > In Option B, there is a extra type introduced to simplify > However it adds nested definition for path > as it has to be cert.path.path for getters and setters > > Please clarify the following > Why scalar types can not be used as IN parameter or OUT parameters of > Service RPCs? > How partial messages can be explicitly specified in service RPCs without > using nesting? > What are the advantages and disadvantages of using message wrappers? > Regards > Ananya > > > > > -- > 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/544ad006-75ea-44fd-8e60-6d4db311f1ac%40googlegroups.com > <https://groups.google.com/d/msgid/protobuf/544ad006-75ea-44fd-8e60-6d4db311f1ac%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Regards, Marc -- 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/CAF95VAxUPpnoYJXWQ%3DBH-6DWWeDmJ-%2BHEJUTS9bQb0J6_YNBmA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
