Skip to content

Commit 47cfbc1

Browse files
committed
fixup! Rename to forbidDuplicateKeys; rename exception; related cleanup
1 parent e2945f2 commit 47cfbc1

File tree

8 files changed

+29
-29
lines changed

8 files changed

+29
-29
lines changed

core/api/kotlinx-serialization-core.api

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public abstract interface class kotlinx/serialization/DeserializationStrategy {
1919
public abstract fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
2020
}
2121

22-
public final class kotlinx/serialization/DuplicateMapKeyException : kotlinx/serialization/SerializationException {
22+
public final class kotlinx/serialization/DuplicateKeyException : kotlinx/serialization/SerializationException {
2323
public fun <init> (Ljava/lang/Object;)V
2424
}
2525

core/api/kotlinx-serialization-core.klib.api

+2-2
Original file line numberDiff line numberDiff line change
@@ -523,8 +523,8 @@ final class kotlinx.serialization.modules/SerializersModuleBuilder : kotlinx.ser
523523
final fun build(): kotlinx.serialization.modules/SerializersModule // kotlinx.serialization.modules/SerializersModuleBuilder.build|build(){}[0]
524524
final fun include(kotlinx.serialization.modules/SerializersModule) // kotlinx.serialization.modules/SerializersModuleBuilder.include|include(kotlinx.serialization.modules.SerializersModule){}[0]
525525
}
526-
final class kotlinx.serialization/DuplicateMapKeyException : kotlinx.serialization/SerializationException { // kotlinx.serialization/DuplicateMapKeyException|null[0]
527-
constructor <init>(kotlin/Any?) // kotlinx.serialization/DuplicateMapKeyException.<init>|<init>(kotlin.Any?){}[0]
526+
final class kotlinx.serialization/DuplicateKeyException : kotlinx.serialization/SerializationException { // kotlinx.serialization/DuplicateKeyException|null[0]
527+
constructor <init>(kotlin/Any?) // kotlinx.serialization/DuplicateKeyException.<init>|<init>(kotlin.Any?){}[0]
528528
}
529529
final class kotlinx.serialization/MissingFieldException : kotlinx.serialization/SerializationException { // kotlinx.serialization/MissingFieldException|null[0]
530530
constructor <init>(kotlin.collections/List<kotlin/String>, kotlin/String) // kotlinx.serialization/MissingFieldException.<init>|<init>(kotlin.collections.List<kotlin.String>;kotlin.String){}[0]

core/commonMain/src/kotlinx/serialization/SerializationExceptions.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ internal constructor(message: String?) : SerializationException(message) {
135135
}
136136

137137
/**
138-
* Thrown when a map deserializer encounters a repeated map key (and configuration disallows this.)
138+
* Thrown when a deserializer encounters a repeated key (and configuration disallows this.)
139139
*/
140140
@ExperimentalSerializationApi
141-
public class DuplicateMapKeyException(key: Any?) :
142-
SerializationException("Duplicate keys not allowed in maps. Key appeared twice: $key")
141+
public class DuplicateKeyException(key: Any?) :
142+
SerializationException("Duplicate keys not allowed. Key appeared twice: $key")

formats/cbor/api/kotlinx-serialization-cbor.api

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ public final class kotlinx/serialization/cbor/Cbor$Default : kotlinx/serializati
1717
}
1818

1919
public final class kotlinx/serialization/cbor/CborBuilder {
20-
public final fun getAllowDuplicateKeys ()Z
2120
public final fun getEncodeDefaults ()Z
21+
public final fun getForbidDuplicateKeys ()Z
2222
public final fun getIgnoreUnknownKeys ()Z
2323
public final fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
24-
public final fun setAllowDuplicateKeys (Z)V
2524
public final fun setEncodeDefaults (Z)V
25+
public final fun setForbidDuplicateKeys (Z)V
2626
public final fun setIgnoreUnknownKeys (Z)V
2727
public final fun setSerializersModule (Lkotlinx/serialization/modules/SerializersModule;)V
2828
}

formats/cbor/api/kotlinx-serialization-cbor.klib.api

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
// Library unique name: <org.jetbrains.kotlinx:kotlinx-serialization-cbor>
99
final class kotlinx.serialization.cbor/CborBuilder { // kotlinx.serialization.cbor/CborBuilder|null[0]
10-
final var allowDuplicateKeys // kotlinx.serialization.cbor/CborBuilder.allowDuplicateKeys|<get-allowDuplicateKeys>(){}[0]
11-
final fun <get-allowDuplicateKeys>(): kotlin/Boolean // kotlinx.serialization.cbor/CborBuilder.allowDuplicateKeys.<get-allowDuplicateKeys>|<get-allowDuplicateKeys>(){}[0]
12-
final fun <set-allowDuplicateKeys>(kotlin/Boolean) // kotlinx.serialization.cbor/CborBuilder.allowDuplicateKeys.<set-allowDuplicateKeys>|<set-allowDuplicateKeys>(kotlin.Boolean){}[0]
1310
final var encodeDefaults // kotlinx.serialization.cbor/CborBuilder.encodeDefaults|<get-encodeDefaults>(){}[0]
1411
final fun <get-encodeDefaults>(): kotlin/Boolean // kotlinx.serialization.cbor/CborBuilder.encodeDefaults.<get-encodeDefaults>|<get-encodeDefaults>(){}[0]
1512
final fun <set-encodeDefaults>(kotlin/Boolean) // kotlinx.serialization.cbor/CborBuilder.encodeDefaults.<set-encodeDefaults>|<set-encodeDefaults>(kotlin.Boolean){}[0]
13+
final var forbidDuplicateKeys // kotlinx.serialization.cbor/CborBuilder.forbidDuplicateKeys|<get-forbidDuplicateKeys>(){}[0]
14+
final fun <get-forbidDuplicateKeys>(): kotlin/Boolean // kotlinx.serialization.cbor/CborBuilder.forbidDuplicateKeys.<get-forbidDuplicateKeys>|<get-forbidDuplicateKeys>(){}[0]
15+
final fun <set-forbidDuplicateKeys>(kotlin/Boolean) // kotlinx.serialization.cbor/CborBuilder.forbidDuplicateKeys.<set-forbidDuplicateKeys>|<set-forbidDuplicateKeys>(kotlin.Boolean){}[0]
1616
final var ignoreUnknownKeys // kotlinx.serialization.cbor/CborBuilder.ignoreUnknownKeys|<get-ignoreUnknownKeys>(){}[0]
1717
final fun <get-ignoreUnknownKeys>(): kotlin/Boolean // kotlinx.serialization.cbor/CborBuilder.ignoreUnknownKeys.<get-ignoreUnknownKeys>|<get-ignoreUnknownKeys>(){}[0]
1818
final fun <set-ignoreUnknownKeys>(kotlin/Boolean) // kotlinx.serialization.cbor/CborBuilder.ignoreUnknownKeys.<set-ignoreUnknownKeys>|<set-ignoreUnknownKeys>(kotlin.Boolean){}[0]

formats/cbor/commonMain/src/kotlinx/serialization/cbor/Cbor.kt

+8-8
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ import kotlinx.serialization.modules.*
3232
public sealed class Cbor(
3333
internal val encodeDefaults: Boolean,
3434
internal val ignoreUnknownKeys: Boolean,
35-
internal val allowDuplicateKeys: Boolean,
35+
internal val forbidDuplicateKeys: Boolean,
3636
override val serializersModule: SerializersModule
3737
) : BinaryFormat {
3838

3939
/**
4040
* The default instance of [Cbor]
4141
*/
42-
public companion object Default : Cbor(false, false, true, EmptySerializersModule())
42+
public companion object Default : Cbor(false, false, false, EmptySerializersModule())
4343

4444
override fun <T> encodeToByteArray(serializer: SerializationStrategy<T>, value: T): ByteArray {
4545
val output = ByteArrayOutput()
@@ -57,10 +57,10 @@ public sealed class Cbor(
5757

5858
@OptIn(ExperimentalSerializationApi::class)
5959
private class CborImpl(
60-
encodeDefaults: Boolean, ignoreUnknownKeys: Boolean, allowDuplicateKeys: Boolean,
60+
encodeDefaults: Boolean, ignoreUnknownKeys: Boolean, forbidDuplicateKeys: Boolean,
6161
serializersModule: SerializersModule,
6262
) :
63-
Cbor(encodeDefaults, ignoreUnknownKeys, allowDuplicateKeys, serializersModule)
63+
Cbor(encodeDefaults, ignoreUnknownKeys, forbidDuplicateKeys, serializersModule)
6464

6565
/**
6666
* Creates an instance of [Cbor] configured from the optionally given [Cbor instance][from]
@@ -70,7 +70,7 @@ private class CborImpl(
7070
public fun Cbor(from: Cbor = Cbor, builderAction: CborBuilder.() -> Unit): Cbor {
7171
val builder = CborBuilder(from)
7272
builder.builderAction()
73-
return CborImpl(builder.encodeDefaults, builder.ignoreUnknownKeys, builder.allowDuplicateKeys, builder.serializersModule)
73+
return CborImpl(builder.encodeDefaults, builder.ignoreUnknownKeys, builder.forbidDuplicateKeys, builder.serializersModule)
7474
}
7575

7676
/**
@@ -94,10 +94,10 @@ public class CborBuilder internal constructor(cbor: Cbor) {
9494
/**
9595
* Specifies whether it is an error to read a map with duplicate keys.
9696
*
97-
* If this is set to false, decoding a map with two keys that compare as equal
98-
* will cause a [DuplicateMapKeyException] error to be thrown.
97+
* If this is set to true, decoding a map with two keys that compare as equal
98+
* will cause a [DuplicateKeyException] error to be thrown.
9999
*/
100-
public var allowDuplicateKeys: Boolean = cbor.allowDuplicateKeys
100+
public var forbidDuplicateKeys: Boolean = cbor.forbidDuplicateKeys
101101

102102
/**
103103
* Module with contextual and polymorphic serializers to be used in the resulting [Cbor] instance.

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

+7-7
Original file line numberDiff line numberDiff line change
@@ -198,18 +198,18 @@ internal class CborEncoder(private val output: ByteArrayOutput) {
198198
}
199199

200200
private class CborMapReader(val cbor: Cbor, decoder: CborDecoder) : CborListReader(cbor, decoder) {
201-
/** Keys that have been seen so far while reading this map. */
201+
/**
202+
* Keys that have been seen so far while reading this map.
203+
*
204+
* Only used if [Cbor.forbidDuplicateKeys] is in effect.
205+
*/
202206
private val seenKeys = mutableSetOf<Any?>()
203207

204208
override fun skipBeginToken() = setSize(decoder.startMap() * 2)
205209

206210
override fun visitKey(key: Any?) {
207-
if (cbor.allowDuplicateKeys)
208-
return
209-
210-
val added = seenKeys.add(key)
211-
if (!added) {
212-
throw DuplicateMapKeyException(key)
211+
if (cbor.forbidDuplicateKeys) {
212+
seenKeys.add(key) || throw DuplicateKeyException(key)
213213
}
214214
}
215215
}

formats/cbor/commonTest/src/kotlinx/serialization/cbor/CborStrictModeTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ package kotlinx.serialization.cbor
33
import kotlinx.serialization.assertFailsWithMessage
44
import kotlinx.serialization.decodeFromByteArray
55
import kotlinx.serialization.HexConverter
6-
import kotlinx.serialization.DuplicateMapKeyException
6+
import kotlinx.serialization.DuplicateKeyException
77
import kotlin.test.Test
88

99
class CborStrictModeTest {
10-
private val strict = Cbor { allowDuplicateKeys = false }
10+
private val strict = Cbor { forbidDuplicateKeys = true }
1111

1212
/** Duplicate keys are rejected in generic maps. */
1313
@Test
1414
fun testDuplicateKeysInMap() {
1515
val duplicateKeys = HexConverter.parseHexBinary("A2617805617806")
16-
assertFailsWithMessage<DuplicateMapKeyException>("Duplicate keys not allowed in maps. Key appeared twice: x") {
16+
assertFailsWithMessage<DuplicateKeyException>("Duplicate keys not allowed. Key appeared twice: x") {
1717
strict.decodeFromByteArray<Map<String, Long>>(duplicateKeys)
1818
}
1919
}

0 commit comments

Comments
 (0)