diff --git a/runtime/src/commonMain/kotlin/pbandk/internal/json/JsonMessageEncoder.kt b/runtime/src/commonMain/kotlin/pbandk/internal/json/JsonMessageEncoder.kt index a90d3b5f..25f2a361 100644 --- a/runtime/src/commonMain/kotlin/pbandk/internal/json/JsonMessageEncoder.kt +++ b/runtime/src/commonMain/kotlin/pbandk/internal/json/JsonMessageEncoder.kt @@ -38,8 +38,8 @@ internal class JsonMessageEncoder(private val jsonConfig: JsonConfig) : MessageE @Suppress("UNCHECKED_CAST") val value = (fd.value as KProperty1).get(message) - if (value == null && fd.oneofMember) continue - if (!fd.oneofMember && !jsonConfig.outputDefaultValues && fd.type.isDefaultValue(value)) continue + if (value == null && fd.type.hasPresence) continue + if (!fd.type.hasPresence && !jsonConfig.outputDefaultValues && fd.type.isDefaultValue(value)) continue val jsonValue = value ?.takeUnless { diff --git a/runtime/src/commonTest/kotlin/pbandk/json/OutputDefaultValuesTest.kt b/runtime/src/commonTest/kotlin/pbandk/json/OutputDefaultValuesTest.kt index df083328..3002dcda 100644 --- a/runtime/src/commonTest/kotlin/pbandk/json/OutputDefaultValuesTest.kt +++ b/runtime/src/commonTest/kotlin/pbandk/json/OutputDefaultValuesTest.kt @@ -32,12 +32,12 @@ class OutputDefaultValuesTest { assertEquals(JsonPrimitive(""), parsedJson["optionalBytes"]) assertEquals(JsonPrimitive(TestAllTypesProto3.NestedEnum.fromValue(0).name!!), parsedJson["optionalNestedEnum"]) - assertEquals(JsonNull, parsedJson["optionalNestedMessage"]) + assertFalse("optionalNestedMessage" in parsedJson) assertEquals(JsonArray(emptyList()), parsedJson["repeatedString"]) assertEquals(JsonObject(emptyMap()), parsedJson["mapBoolBool"]) - assertEquals(JsonNull, parsedJson["optionalStringWrapper"]) + assertFalse("optionalStringWrapper" in parsedJson) assertEquals(JsonPrimitive(false), parsedJson["optionalBoolWrapper"]) } @@ -55,13 +55,13 @@ class OutputDefaultValuesTest { @Test fun testProto2EnumUnsetField() { val message = MessageWithEnum() - assertEquals("{\"value\":null}", message.encodeToJsonString(jsonConfigCompactOutput)) + assertEquals("{}", message.encodeToJsonString(jsonConfigCompactOutput)) } @Test fun testProto2EnumFieldSetToDefaultValue() { val message = MessageWithEnum(value = MessageWithEnum.EnumType.FOO) - assertEquals("{}", message.encodeToJsonString(jsonConfigCompactOutput)) + assertEquals("{\"value\":\"FOO\"}", message.encodeToJsonString(jsonConfigCompactOutput)) } @Test