Skip to content

Commit 718422f

Browse files
committed
some cleanups
1 parent 5857ef0 commit 718422f

File tree

3 files changed

+40
-50
lines changed

3 files changed

+40
-50
lines changed

formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/CborElementSerializers.kt

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,6 @@ import kotlinx.serialization.encoding.*
1515
* Serializer object providing [SerializationStrategy] and [DeserializationStrategy] for [CborElement].
1616
* It can only be used by with [Cbor] format and its input ([CborDecoder] and [CborEncoder]).
1717
*/
18-
19-
internal fun CborWriter.encodeTags(value: CborElement) { // Encode tags if present
20-
if (value.tags.isNotEmpty()) {
21-
for (tag in value.tags) {
22-
encodeTag(tag)
23-
}
24-
}
25-
26-
}
27-
2818
internal object CborElementSerializer : KSerializer<CborElement> {
2919
override val descriptor: SerialDescriptor =
3020
buildSerialDescriptor("kotlinx.serialization.cbor.CborElement", PolymorphicKind.SEALED) {
@@ -42,7 +32,7 @@ internal object CborElementSerializer : KSerializer<CborElement> {
4232
}
4333

4434
override fun serialize(encoder: Encoder, value: CborElement) {
45-
verify(encoder)
35+
encoder.asCborEncoder()
4636

4737
// Encode the value
4838
when (value) {
@@ -67,10 +57,8 @@ internal object CborPrimitiveSerializer : KSerializer<CborPrimitive> {
6757
buildSerialDescriptor("kotlinx.serialization.cbor.CborPrimitive", PrimitiveKind.STRING)
6858

6959
override fun serialize(encoder: Encoder, value: CborPrimitive) {
70-
verify(encoder)
7160
val cborEncoder = encoder.asCborEncoder()
7261

73-
7462
cborEncoder.encodeTags(value)
7563

7664
when (value) {
@@ -96,17 +84,17 @@ internal object CborPrimitiveSerializer : KSerializer<CborPrimitive> {
9684
* It can only be used by with [Cbor] format an its input ([CborDecoder] and [CborEncoder]).
9785
*/
9886
internal object CborNullSerializer : KSerializer<CborNull> {
99-
// technically, CborNull is an object, but it does not call beginStructure/endStructure at all
87+
10088
override val descriptor: SerialDescriptor =
10189
buildSerialDescriptor("kotlinx.serialization.cbor.CborNull", SerialKind.ENUM)
10290

10391
override fun serialize(encoder: Encoder, value: CborNull) {
104-
verify(encoder).encodeTags(value)
92+
encoder.asCborEncoder().encodeTags(value)
10593
encoder.encodeNull()
10694
}
10795

10896
override fun deserialize(decoder: Decoder): CborNull {
109-
verify(decoder)
97+
decoder.asCborDecoder()
11098
if (decoder.decodeNotNullMark()) {
11199
throw CborDecodingException("Expected 'null' literal")
112100
}
@@ -119,24 +107,26 @@ public object CborIntSerializer : KSerializer<CborNegativeInt> {
119107
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlinx.serialization.cbor.CborInt", PrimitiveKind.LONG)
120108

121109
override fun serialize(encoder: Encoder, value: CborNegativeInt) {
122-
verify(encoder).encodeTags(value)
110+
encoder.asCborEncoder().encodeTags(value)
123111
encoder.encodeLong(value.value)
124112
}
125113

126114
override fun deserialize(decoder: Decoder): CborNegativeInt {
127-
return CborNegativeInt( decoder.decodeLong())
115+
decoder.asCborDecoder()
116+
return CborNegativeInt(decoder.decodeLong())
128117
}
129118
}
130119

131120
public object CborUIntSerializer : KSerializer<CborPositiveInt> {
132121
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("CborUInt", PrimitiveKind.LONG)
133122

134123
override fun serialize(encoder: Encoder, value: CborPositiveInt) {
135-
verify(encoder).encodeTags(value)
124+
encoder.asCborEncoder().encodeTags(value)
136125
encoder.encodeInline(descriptor).encodeSerializableValue(ULong.serializer(), value.value)
137126
}
138127

139128
override fun deserialize(decoder: Decoder): CborPositiveInt {
129+
decoder.asCborDecoder()
140130
return CborPositiveInt(decoder.decodeInline(descriptor).decodeSerializableValue(ULong.serializer()))
141131
}
142132
}
@@ -145,11 +135,12 @@ public object CborDoubleSerializer : KSerializer<CborDouble> {
145135
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlinx.serialization.cbor.CborDouble", PrimitiveKind.DOUBLE)
146136

147137
override fun serialize(encoder: Encoder, value: CborDouble) {
148-
verify(encoder).encodeTags(value)
138+
encoder.asCborEncoder().encodeTags(value)
149139
encoder.encodeDouble(value.value)
150140
}
151141

152142
override fun deserialize(decoder: Decoder): CborDouble {
143+
decoder.asCborDecoder()
153144
return CborDouble(decoder.decodeDouble())
154145
}
155146
}
@@ -163,13 +154,13 @@ public object CborStringSerializer : KSerializer<CborString> {
163154
PrimitiveSerialDescriptor("kotlinx.serialization.cbor.CborString", PrimitiveKind.STRING)
164155

165156
override fun serialize(encoder: Encoder, value: CborString) {
166-
verify(encoder).encodeTags(value)
157+
encoder.asCborEncoder().encodeTags(value)
167158
encoder.encodeString(value.value)
168159
}
169160

170161
override fun deserialize(decoder: Decoder): CborString {
171-
val input = decoder.asCborDecoder()
172-
val element = input.decodeCborElement()
162+
val cborDecoder = decoder.asCborDecoder()
163+
val element = cborDecoder.decodeCborElement()
173164
if (element !is CborString) throw CborDecodingException("Unexpected CBOR element, expected CborString, had ${element::class}")
174165
return element
175166
}
@@ -184,13 +175,13 @@ public object CborBooleanSerializer : KSerializer<CborBoolean> {
184175
PrimitiveSerialDescriptor("kotlinx.serialization.cbor.CborBoolean", PrimitiveKind.BOOLEAN)
185176

186177
override fun serialize(encoder: Encoder, value: CborBoolean) {
187-
verify(encoder).encodeTags(value)
178+
encoder.asCborEncoder().encodeTags(value)
188179
encoder.encodeBoolean(value.boolean)
189180
}
190181

191182
override fun deserialize(decoder: Decoder): CborBoolean {
192-
val input = decoder.asCborDecoder()
193-
val element = input.decodeCborElement()
183+
val cborDecoder = decoder.asCborDecoder()
184+
val element = cborDecoder.decodeCborElement()
194185
if (element !is CborBoolean) throw CborDecodingException("Unexpected CBOR element, expected CborBoolean, had ${element::class}")
195186
return element
196187
}
@@ -205,14 +196,14 @@ public object CborByteStringSerializer : KSerializer<CborByteString> {
205196
PrimitiveSerialDescriptor("kotlinx.serialization.cbor.CborByteString", PrimitiveKind.STRING)
206197

207198
override fun serialize(encoder: Encoder, value: CborByteString) {
208-
val cborEncoder = verify(encoder)
199+
val cborEncoder = encoder.asCborEncoder()
209200
cborEncoder.encodeTags(value)
210201
cborEncoder.encodeByteArray(value.bytes)
211202
}
212203

213204
override fun deserialize(decoder: Decoder): CborByteString {
214-
val input = decoder.asCborDecoder()
215-
val element = input.decodeCborElement()
205+
val cborDecoder = decoder.asCborDecoder()
206+
val element = cborDecoder.decodeCborElement()
216207
if (element !is CborByteString) throw CborDecodingException("Unexpected CBOR element, expected CborByteString, had ${element::class}")
217208
return element
218209
}
@@ -232,16 +223,13 @@ public object CborMapSerializer : KSerializer<CborMap> {
232223
override val descriptor: SerialDescriptor = CborMapDescriptor
233224

234225
override fun serialize(encoder: Encoder, value: CborMap) {
235-
verify(encoder)
236226
val cborEncoder = encoder.asCborEncoder()
237-
238227
cborEncoder.encodeTags(value)
239-
240228
MapSerializer(CborElementSerializer, CborElementSerializer).serialize(encoder, value)
241229
}
242230

243231
override fun deserialize(decoder: Decoder): CborMap {
244-
verify(decoder)
232+
decoder.asCborDecoder()
245233
return CborMap(MapSerializer(CborElementSerializer, CborElementSerializer).deserialize(decoder))
246234
}
247235
}
@@ -259,34 +247,25 @@ public object CborListSerializer : KSerializer<CborList> {
259247
override val descriptor: SerialDescriptor = CborListDescriptor
260248

261249
override fun serialize(encoder: Encoder, value: CborList) {
262-
verify(encoder)
263250
val cborEncoder = encoder.asCborEncoder()
264-
265251
cborEncoder.encodeTags(value)
266-
267252
ListSerializer(CborElementSerializer).serialize(encoder, value)
268253
}
269254

270255
override fun deserialize(decoder: Decoder): CborList {
271-
verify(decoder)
256+
decoder.asCborDecoder()
272257
return CborList(ListSerializer(CborElementSerializer).deserialize(decoder))
273258
}
274259
}
275260

276-
private fun verify(encoder: Encoder) =
277-
encoder.asCborEncoder()
278-
279-
280-
private fun verify(decoder: Decoder) {
281-
decoder.asCborDecoder()
282-
}
283261

284262
internal fun Decoder.asCborDecoder(): CborDecoder = this as? CborDecoder
285263
?: throw IllegalStateException(
286264
"This serializer can be used only with Cbor format." +
287265
"Expected Decoder to be CborDecoder, got ${this::class}"
288266
)
289267

268+
/*need to expose writer to access encodeTag()*/
290269
internal fun Encoder.asCborEncoder() = this as? CborWriter
291270
?: throw IllegalStateException(
292271
"This serializer can be used only with Cbor format." +
@@ -313,4 +292,13 @@ private fun defer(deferred: () -> SerialDescriptor): SerialDescriptor = object :
313292
override fun getElementAnnotations(index: Int): List<Annotation> = original.getElementAnnotations(index)
314293
override fun getElementDescriptor(index: Int): SerialDescriptor = original.getElementDescriptor(index)
315294
override fun isElementOptional(index: Int): Boolean = original.isElementOptional(index)
295+
}
296+
297+
private fun CborWriter.encodeTags(value: CborElement) { // Encode tags if present
298+
if (value.tags.isNotEmpty()) {
299+
for (tag in value.tags) {
300+
encodeTag(tag)
301+
}
302+
}
303+
316304
}

formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/CborTreeReader.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import kotlinx.serialization.cbor.*
1212
* [CborTreeReader] reads CBOR data from [parser] and constructs a [CborElement] tree.
1313
*/
1414
internal class CborTreeReader(
15+
//no config values make sense here, because we have no "schema".
16+
//we cannot validate tags, or disregard nulls, can we?!
17+
//still, this needs to go here, in case it evolves to a point where we need to respect certain config values
1518
private val configuration: CborConfiguration,
1619
private val parser: CborParser
1720
) {
@@ -55,22 +58,20 @@ internal class CborTreeReader(
5558
parser.readByte() // Advance parser position
5659
CborBoolean(false, tags)
5760
}
61+
5862
0xF5 -> {
5963
parser.readByte() // Advance parser position
6064
CborBoolean(true, tags)
6165
}
66+
6267
0xF6, 0xF7 -> {
6368
parser.nextNull()
6469
CborNull(tags)
6570
}
6671
// Half/Float32/Float64
6772
NEXT_HALF, NEXT_FLOAT, NEXT_DOUBLE -> CborDouble(parser.nextDouble(), tags)
6873
else -> throw CborDecodingException(
69-
"Invalid simple value or float type: ${
70-
parser.curByte.toString(
71-
16
72-
)
73-
}"
74+
"Invalid simple value or float type: ${parser.curByte.toString(16)}"
7475
)
7576
}
7677
}

formats/cbor/commonMain/src/kotlinx/serialization/cbor/internal/Encoder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ internal sealed class CborWriter(
3232
override fun encodeByteArray(byteArray: ByteArray) {
3333
getDestination().encodeByteString(byteArray)
3434
}
35+
3536
protected var isClass = false
3637

3738
protected var encodeByteArrayAsByteString = false
@@ -148,7 +149,7 @@ internal sealed class CborWriter(
148149
return true
149150
}
150151

151-
internal fun encodeTag(tag: ULong)= getDestination().encodeTag(tag)
152+
internal fun encodeTag(tag: ULong) = getDestination().encodeTag(tag)
152153
}
153154

154155

0 commit comments

Comments
 (0)