diff options
author | bulatman <bulatman@yandex-team.com> | 2022-12-16 16:19:13 +0300 |
---|---|---|
committer | bulatman <bulatman@yandex-team.com> | 2022-12-16 16:19:13 +0300 |
commit | b7ee1c8a87b97e1ce35c3b9c101230e67daebac4 (patch) | |
tree | d65aa8374285ad88fad00e980f930b535110b506 /library/cpp/protobuf | |
parent | dcce88f9fa7e94021bf0221b8d43b5ac747f4829 (diff) | |
download | ydb-b7ee1c8a87b97e1ce35c3b9c101230e67daebac4.tar.gz |
Do not print missing oneof field in proto2json even MissingKeyDefault is specified
Diffstat (limited to 'library/cpp/protobuf')
-rw-r--r-- | library/cpp/protobuf/json/proto2json_printer.cpp | 3 | ||||
-rw-r--r-- | library/cpp/protobuf/json/ut/proto2json_ut.cpp | 16 | ||||
-rw-r--r-- | library/cpp/protobuf/json/ut/test.proto | 11 |
3 files changed, 27 insertions, 3 deletions
diff --git a/library/cpp/protobuf/json/proto2json_printer.cpp b/library/cpp/protobuf/json/proto2json_printer.cpp index 409147dc06..6ec7800ad3 100644 --- a/library/cpp/protobuf/json/proto2json_printer.cpp +++ b/library/cpp/protobuf/json/proto2json_printer.cpp @@ -234,7 +234,8 @@ namespace NProtobufJson { << field.full_name() << "."; } } - shouldPrintField = shouldPrintField || GetConfig().MissingSingleKeyMode == TProto2JsonConfig::MissingKeyDefault; + shouldPrintField = shouldPrintField || + (GetConfig().MissingSingleKeyMode == TProto2JsonConfig::MissingKeyDefault && !field.containing_oneof()); if (shouldPrintField) { switch (field.cpp_type()) { diff --git a/library/cpp/protobuf/json/ut/proto2json_ut.cpp b/library/cpp/protobuf/json/ut/proto2json_ut.cpp index d4d6d374e9..3f154645a1 100644 --- a/library/cpp/protobuf/json/ut/proto2json_ut.cpp +++ b/library/cpp/protobuf/json/ut/proto2json_ut.cpp @@ -74,6 +74,22 @@ Y_UNIT_TEST_SUITE(TProto2JsonFlatTest) { #undef DEFINE_FIELD } + Y_UNIT_TEST(TestOneOfDefault) { + using namespace ::google::protobuf; + TFlatOneOfDefault proto; + NJson::TJsonValue json; + TProto2JsonConfig cfg; + cfg.SetMissingSingleKeyMode(TProto2JsonConfig::MissingKeyDefault); + UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, cfg)); + + UNIT_ASSERT(!json.Has("ChoiceOne")); + UNIT_ASSERT(!json.Has("ChoiceTwo")); + + proto.SetChoiceOne("one"); + UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, cfg)); + UNIT_ASSERT_EQUAL("one", json["ChoiceOne"].GetStringRobust()); + } + Y_UNIT_TEST(TestNameGenerator) { TNameGeneratorType proto; proto.SetField(42); diff --git a/library/cpp/protobuf/json/ut/test.proto b/library/cpp/protobuf/json/ut/test.proto index 6bc1984373..8cd3db813a 100644 --- a/library/cpp/protobuf/json/ut/test.proto +++ b/library/cpp/protobuf/json/ut/test.proto @@ -122,6 +122,13 @@ message TFlatDefault { optional string UserID = 20 [default = "some_id"]; }; +message TFlatOneOfDefault { + oneof Choice { + string ChoiceOne = 1 [default = "one"]; + string ChoiceTwo = 2 [default = "two"]; + } +} + message TCompositeOptional { optional TFlatOptional Part = 1; }; @@ -206,9 +213,9 @@ message TSingleTimestamp { } message TExtensionField { - extensions 100 to 199; + extensions 100 to 199; } extend TExtensionField { optional int32 bar = 123; -}
\ No newline at end of file +} |