Skip to content

Commit a120db3

Browse files
committed
Make sure that primitives and inline value classes that are primitives can be packed.
inline popTag -> popTagOrDefault is needed, because packed serializer will use MISSING_TAG for entries, popTag fails on that.
1 parent 1f9f793 commit a120db3

File tree

3 files changed

+3
-4
lines changed

3 files changed

+3
-4
lines changed

formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/internal/Helpers.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,11 @@ internal val ProtoDesc.integerType: ProtoIntegerType
6868
}
6969

7070
internal val SerialDescriptor.isPackable: Boolean
71-
@OptIn(kotlinx.serialization.ExperimentalSerializationApi::class)
7271
get() = when (kind) {
7372
PrimitiveKind.STRING,
7473
!is PrimitiveKind -> false
7574
else -> true
76-
}
75+
} || isInline && elementsCount == 1 && getElementDescriptor(0).isPackable
7776

7877
internal val ProtoDesc.isPacked: Boolean
7978
get() = (this and PACKEDMASK) != 0L

formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/internal/ProtobufTaggedDecoder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ internal abstract class ProtobufTaggedDecoder : ProtobufTaggedBase(), Decoder, C
9595
}
9696

9797
override fun decodeInline(descriptor: SerialDescriptor): Decoder {
98-
return decodeTaggedInline(popTag(), descriptor)
98+
return decodeTaggedInline(popTagOrDefault(), descriptor)
9999
}
100100

101101
override fun decodeInlineElement(

formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/internal/ProtobufTaggedEncoder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ internal abstract class ProtobufTaggedEncoder : ProtobufTaggedBase(), Encoder, C
175175
}
176176

177177
override fun encodeInline(descriptor: SerialDescriptor): Encoder {
178-
return encodeTaggedInline(popTag(), descriptor)
178+
return encodeTaggedInline(popTagOrDefault(), descriptor)
179179
}
180180

181181
override fun encodeInlineElement(descriptor: SerialDescriptor, index: Int): Encoder {

0 commit comments

Comments
 (0)