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.

Reply via email to