Skip to content

Commit 1c82bde

Browse files
committed
Fix the custom serializers with EfficientBinaryFormat by making
them consider shouldEncodeElementDefault's output.
1 parent 707c6c8 commit 1c82bde

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

formats/json-tests/commonTest/src/kotlinx/serialization/json/JsonCustomSerializersTest.kt

+16-8
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class JsonCustomSerializersTest : JsonTestBase() {
4141
override fun serialize(encoder: Encoder, value: C) {
4242
val elemOutput = encoder.beginStructure(descriptor)
4343
elemOutput.encodeIntElement(descriptor, 1, value.b)
44-
if (value.a != 31) elemOutput.encodeIntElement(descriptor, 0, value.a)
44+
if (value.a != 31 || elemOutput.shouldEncodeElementDefault(descriptor, 0)) elemOutput.encodeIntElement(descriptor, 0, value.a)
4545
elemOutput.endStructure(descriptor)
4646
}
4747
}
@@ -57,7 +57,9 @@ class JsonCustomSerializersTest : JsonTestBase() {
5757
override fun serialize(encoder: Encoder, value: CList2) {
5858
val elemOutput = encoder.beginStructure(descriptor)
5959
elemOutput.encodeSerializableElement(descriptor, 1, ListSerializer(C), value.c)
60-
if (value.d != 5) elemOutput.encodeIntElement(descriptor, 0, value.d)
60+
if (value.d != 5 || elemOutput.shouldEncodeElementDefault(descriptor, 0)) {
61+
elemOutput.encodeIntElement(descriptor, 0, value.d)
62+
}
6163
elemOutput.endStructure(descriptor)
6264
}
6365
}
@@ -69,7 +71,9 @@ class JsonCustomSerializersTest : JsonTestBase() {
6971
companion object : KSerializer<CList3> {
7072
override fun serialize(encoder: Encoder, value: CList3) {
7173
val elemOutput = encoder.beginStructure(descriptor)
72-
if (value.e.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.e)
74+
if (value.e.isNotEmpty() || elemOutput.shouldEncodeElementDefault(descriptor, 0)) {
75+
elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.e)
76+
}
7377
elemOutput.encodeIntElement(descriptor, 1, value.f)
7478
elemOutput.endStructure(descriptor)
7579
}
@@ -83,7 +87,9 @@ class JsonCustomSerializersTest : JsonTestBase() {
8387
override fun serialize(encoder: Encoder, value: CList4) {
8488
val elemOutput = encoder.beginStructure(descriptor)
8589
elemOutput.encodeIntElement(descriptor, 1, value.h)
86-
if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.g)
90+
if (value.g.isNotEmpty() || elemOutput.shouldEncodeElementDefault(descriptor, 0)) {
91+
elemOutput.encodeSerializableElement(descriptor, 0, ListSerializer(C), value.g)
92+
}
8793
elemOutput.endStructure(descriptor)
8894
}
8995
}
@@ -96,10 +102,12 @@ class JsonCustomSerializersTest : JsonTestBase() {
96102
override fun serialize(encoder: Encoder, value: CList5) {
97103
val elemOutput = encoder.beginStructure(descriptor)
98104
elemOutput.encodeIntElement(descriptor, 1, value.h)
99-
if (value.g.isNotEmpty()) elemOutput.encodeSerializableElement(
100-
descriptor, 0, ListSerializer(Int.serializer()),
101-
value.g
102-
)
105+
if (value.g.isNotEmpty() || elemOutput.shouldEncodeElementDefault(descriptor, 0)) {
106+
elemOutput.encodeSerializableElement(
107+
descriptor, 0, ListSerializer(Int.serializer()),
108+
value.g
109+
)
110+
}
103111
elemOutput.endStructure(descriptor)
104112
}
105113
}

0 commit comments

Comments
 (0)