Oh, btw, one advantage is that the receiving end knows all the proto definitions it might receive.
On Saturday, July 4, 2020 at 12:00:17 PM UTC+2, [email protected] wrote: > > Or can I, instead of going through all the troubles with protobuf/json in > javascript, just use a `map`? > ``` > // proto > message Request { > map<string, ?type?> variables = 1; > } > ``` > But what would `?typ?` then be if it the values can ben anything > (proto.MessageX, string, boolean, etc)? > > > On Friday, July 3, 2020 at 11:40:54 PM UTC+2, [email protected] wrote: >> >> I just found out about `proto.google.protobuf.Struct.fromJavaScript` and >> tried it: >> >> ``` >> // code >> struct = proto.google.protobuf.Struct.fromJavaScript(vars); >> req = new Request; >> req.variables = struct; >> ``` >> >> This works for a simple `obj` (e.g. `{"key": "val"}`), but for an `obj` >> with a proto message field (such as above) it resulted in : >> >> ``` >> struct_pb.js:875 Uncaught Error: Unexpected struct type. >> at Function.proto.google.protobuf.Value.fromJavaScript >> (struct_pb.js:875) >> at Function.proto.google.protobuf.Struct.fromJavaScript >> (struct_pb.js:941) >> at Function.proto.google.protobuf.Value.fromJavaScript >> (struct_pb.js:871) >> at Function.proto.google.protobuf.Struct.fromJavaScript >> (struct_pb.js:941) >> at Function.proto.google.protobuf.Value.fromJavaScript >> (struct_pb.js:871) >> at Function.proto.google.protobuf.Struct.fromJavaScript >> (struct_pb.js:941) >> at Function.proto.google.protobuf.Value.fromJavaScript >> (struct_pb.js:871) >> at Function.proto.google.protobuf.Struct.fromJavaScript >> (struct_pb.js:941) >> ``` >> >> >> On Friday, July 3, 2020 at 11:12:31 PM UTC+2, [email protected] wrote: >>> >>> I've been struggling with passing a JSON with Message values back and >>> forth between a browser (grpc-web) and server (python grpc). A Struct seems >>> to be the way but even though the struct I'm sending looks perfectly fine, >>> it is empty once received by the server. >>> >>> ``` >>> // proto >>> message Result { >>> google.protobuf.Struct variables = 1; >>> } >>> >>> // obj - Where variables would contain a (1 level deep) JSON with >>> different types of values, e.g.: >>> { >>> "key1": 1, >>> "key2": true, >>> "key3": proto_msg_a //instance of proto.MessageA >>> } >>> >>> // code (js in browser using grpc-web) >>> struct = new proto.google.protobuf.Struct(obj); >>> req = new Request; >>> req.variables = struct; >>> >>> ``` >>> >>> Checking `req.variables` before sending shows that it's indeed a >>> `Struct` with all the correct fields in it. But once the other end (server) >>> receives it `req.variables` is an empty `Struct`. For testing purposes I >>> tried an `obj` that is simply `{'key': 'value'}`, but the result was the >>> same. >>> >>> >>> I would really like to use proto messages in variables. The reason for >>> picking protobuf/grpc was exactly this, being able to use the same type >>> throughout our complete platform, but this seems to be blocking this goal. >>> Did I miss something? What would you do? >>> >>> I've also asked this on StackOverflow: >>> https://stackoverflow.com/questions/62693938/grpc-passing-json-with-proto-message-field-between-browser-and-server >>> >> -- You received this message because you are subscribed to the Google Groups "grpc.io" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/grpc-io/35b07876-e6d5-4dd3-ae7d-0608fc74949ao%40googlegroups.com.
