Unnecessary being that deserialization ismore than a switch on the type.
The Union approach also puts all the fields on one object, as opposed to
separating by the type field - this is what I wanted to confirm as
unsupported by protobuf.

On Tue, May 10, 2016, 10:22 Tim Kientzle <t...@kientzle.com> wrote:

> I’m not sure what you think is “unnecessary”.
>
> Are you trying to avoid actually declaring the types of a, b, c, d, etc?
>
> If so, you could use google.protobuf.Struct (which can parse a JSON object
> in a generic way without requiring you to create a .proto at all) or any of
> a number of other popular JSON parsing libraries.
>
> But if you want the type-safety that protobuf provides, then you have to
> actually tell the protoc compiler the type of every field.  In return, you
> can skip a lot of checking in your code.
>
> Cheers,
>
> Tim
>
> > On May 10, 2016, at 7:08 AM, Marco <a.f.ma...@gmail.com> wrote:
> >
> > That does work, but it seems like it creates a lot of unnecessary work
> if there are many fields.
> >
> > Is there a better way to handle a schema more like this?
> >
> >  { type: "error", message: "wrong"} or { type:"ok", a: 1, b:2, c:3, d:4,
> ... }.
> >
> > On Monday, May 9, 2016 at 3:12:19 PM UTC-4, Feng Xiao wrote:
> >
> >
> > On Fri, May 6, 2016 at 8:18 PM, Marco <a.f....@gmail.com> wrote:
> > I'm looking to generate de/serialization for json tagged union messages
> from an external rest api, eg.
> > { type: "error", message: "wrong"} or { type:"ok", response: { a: 1, b:
> 2}}.
> >
> > Reading the docs it seems like an any valued field the type field
> modified json_name  would work similarly, although this isn't supported.
> >
> > Is there an existing .proto message that would map to those messages?
> Perhaps with some annotation to this more obvious schema, or being able to
> specify a custom tag to determine which case of a oneof is in use (instead
> of the default enum value)?
> > How about something like:
> >
> > message Response {
> >   string type = 1;
> >   message Content {
> >     int32 a = 1;
> >     int32 b = 2;
> >   }
> >   oneof OneofResponse {
> >     string message = 2;
> >     Content response = 3;
> >   }
> > }
> >
> > ?
> >
> > message Error {
> >   string message = 1;
> > }
> >
> > message Second {
> >   int64 response = 1;
> > }
> >
> > message MyUnion {
> >   oneof Either {
> >     Error  err = 1;
> >     Ok     ok  = 2;
> >   }
> > }
> >
> >
> >
> >
> > --
> > 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 protobuf+u...@googlegroups.com.
> > To post to this group, send email to prot...@googlegroups.com.
> > Visit this group at https://groups.google.com/group/protobuf.
> > 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 protobuf+unsubscr...@googlegroups.com.
> > To post to this group, send email to protobuf@googlegroups.com.
> > Visit this group at https://groups.google.com/group/protobuf.
> > 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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to