Skip to content

Commit 6592eb0

Browse files
committed
Add map serializers
1 parent dab0673 commit 6592eb0

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright 2016-2024 JetBrains s.r.o.
3+
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4+
*/
5+
6+
package kotlinx.collections.immutable.serialization
7+
8+
import kotlinx.collections.immutable.ImmutableMap
9+
import kotlinx.collections.immutable.PersistentMap
10+
import kotlinx.collections.immutable.toImmutableMap
11+
import kotlinx.collections.immutable.toPersistentHashMap
12+
import kotlinx.collections.immutable.toPersistentMap
13+
import kotlinx.serialization.KSerializer
14+
import kotlinx.serialization.builtins.MapSerializer
15+
import kotlinx.serialization.descriptors.SerialDescriptor
16+
import kotlinx.serialization.encoding.Decoder
17+
import kotlinx.serialization.encoding.Encoder
18+
19+
internal class DefaultImmutableMapSerializer<K, V, M : ImmutableMap<K, V>>(
20+
keySerializer: KSerializer<K>,
21+
valueSerializer: KSerializer<V>,
22+
private val transform: (Map<K, V>) -> M
23+
) : KSerializer<M> {
24+
private val mapSerializer = MapSerializer(keySerializer, valueSerializer)
25+
26+
override val descriptor: SerialDescriptor = mapSerializer.descriptor
27+
28+
override fun serialize(encoder: Encoder, value: M) {
29+
return mapSerializer.serialize(encoder, value.toMap())
30+
}
31+
32+
override fun deserialize(decoder: Decoder): M {
33+
return mapSerializer.deserialize(decoder).let(transform)
34+
}
35+
}
36+
37+
public class ImmutableMapSerializer<T, V>(
38+
keySerializer: KSerializer<T>,
39+
valueSerializer: KSerializer<V>,
40+
) : KSerializer<ImmutableMap<T, V>> by DefaultImmutableMapSerializer(
41+
keySerializer = keySerializer,
42+
valueSerializer = valueSerializer,
43+
transform = { decodedMap -> decodedMap.toImmutableMap() }
44+
)
45+
46+
public class PersistentMapSerializer<T, V>(
47+
keySerializer: KSerializer<T>,
48+
valueSerializer: KSerializer<V>,
49+
) : KSerializer<PersistentMap<T, V>> by DefaultImmutableMapSerializer(
50+
keySerializer = keySerializer,
51+
valueSerializer = valueSerializer,
52+
transform = { decodedMap -> decodedMap.toPersistentMap() }
53+
)
54+
55+
public class PersistentHashMapSerializer<T, V>(
56+
keySerializer: KSerializer<T>,
57+
valueSerializer: KSerializer<V>,
58+
) : KSerializer<PersistentMap<T, V>> by DefaultImmutableMapSerializer(
59+
keySerializer = keySerializer,
60+
valueSerializer = valueSerializer,
61+
transform = { decodedMap -> decodedMap.toPersistentHashMap() }
62+
)

0 commit comments

Comments
 (0)