feat(6178): emit ruby enum as integer

pull/11673/head
MQuy 2 years ago
parent 26af540a7a
commit e61c13c59a
  1. 5
      ruby/ext/google/protobuf_c/message.c
  2. 28
      ruby/tests/encode_decode_test.rb

@ -1164,6 +1164,11 @@ static VALUE Message_encode_json(int argc, VALUE* argv, VALUE klass) {
Qfalse))) {
options |= upb_JsonEncode_EmitDefaults;
}
if (RTEST(rb_hash_lookup2(hash_args, ID2SYM(rb_intern("enums_as_integers")),
Qfalse))) {
options |= upb_JsonEncode_FormatEnumsAsIntegers;
}
}
upb_Status_Clear(&status);

@ -84,6 +84,34 @@ class EncodeDecodeTest < Test::Unit::TestCase
)
assert_match 'optional_int32', json
# Test for enums printing as ints.
msg = A::B::C::TestMessage.new({ optional_enum: 1 })
json = A::B::C::TestMessage.encode_json(
msg,
{ :enums_as_integers => true }
)
assert_match '"optionalEnum":1', json
# Test for default enum being printed as int.
msg = A::B::C::TestMessage.new({ optional_enum: 0 })
json = A::B::C::TestMessage.encode_json(
msg,
{ :enums_as_integers => true, :emit_defaults => true }
)
assert_match '"optionalEnum":0', json
# Test for repeated enums printing as ints.
msg = A::B::C::TestMessage.new({ repeated_enum: [0,1,2,3] })
json = A::B::C::TestMessage.encode_json(
msg,
{ :enums_as_integers => true }
)
assert_match '"repeatedEnum":[0,1,2,3]', json
end
def test_encode_wrong_msg

Loading…
Cancel
Save