aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/protobuf/json/proto2json_printer.cpp3
-rw-r--r--library/cpp/protobuf/json/ut/proto2json_ut.cpp16
-rw-r--r--library/cpp/protobuf/json/ut/test.proto11
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
+}