diff options
Diffstat (limited to 'formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoding.kt')
-rw-r--r-- | formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoding.kt | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoding.kt b/formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoding.kt index 0b7a0e0c..b77a18c5 100644 --- a/formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoding.kt +++ b/formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoding.kt @@ -70,6 +70,8 @@ internal open class CborWriter(private val cbor: Cbor, protected val encoder: Cb if (encodeByteArrayAsByteString && serializer.descriptor == ByteArraySerializer().descriptor) { encoder.encodeByteString(value as ByteArray) } else { + encodeByteArrayAsByteString = encodeByteArrayAsByteString || serializer.descriptor.isInlineByteString() + super.encodeSerializableValue(serializer, value) } } @@ -278,6 +280,7 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb @Suppress("UNCHECKED_CAST") decoder.nextByteString() as T } else { + decodeByteArrayAsByteString = decodeByteArrayAsByteString || deserializer.descriptor.isInlineByteString() super.decodeSerializableValue(deserializer) } } @@ -636,6 +639,11 @@ private fun SerialDescriptor.isByteString(index: Int): Boolean { return getElementAnnotations(index).find { it is ByteString } != null } +private fun SerialDescriptor.isInlineByteString(): Boolean { + // inline item classes should only have 1 item + return isInline && isByteString(0) +} + private val normalizeBaseBits = SINGLE_PRECISION_NORMALIZE_BASE.toBits() |