From 7b8f571756792ed2296a766c70af4ddf69082099 Mon Sep 17 00:00:00 2001 From: Ewout Date: Tue, 20 Feb 2018 16:58:58 +0100 Subject: Ruby JSON encoding omits zero-length repeated fields by default. This makes it behave the same way as the other implementations. It is also nice to always encode an empty message as {}. --- ruby/ext/google/protobuf_c/encode_decode.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ruby/ext') diff --git a/ruby/ext/google/protobuf_c/encode_decode.c b/ruby/ext/google/protobuf_c/encode_decode.c index 12080d03..8c6ded64 100644 --- a/ruby/ext/google/protobuf_c/encode_decode.c +++ b/ruby/ext/google/protobuf_c/encode_decode.c @@ -963,13 +963,15 @@ static void putary(VALUE ary, const upb_fielddef *f, upb_sink *sink, if (ary == Qnil) return; + size = NUM2INT(RepeatedField_length(ary)); + if (size == 0 && !emit_defaults) return; + upb_sink_startseq(sink, getsel(f, UPB_HANDLER_STARTSEQ), &subsink); if (upb_fielddef_isprimitive(f)) { sel = getsel(f, upb_handlers_getprimitivehandlertype(f)); } - size = NUM2INT(RepeatedField_length(ary)); for (int i = 0; i < size; i++) { void* memory = RepeatedField_index_native(ary, i); switch (type) { -- cgit v1.2.3