Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -63,11 +63,11 @@ internal sealed class ListLikeSerializer<Element, Collection, Builder>( | |
|
||
override fun serialize(encoder: Encoder, value: Collection) { | ||
val size = value.collectionSize() | ||
val composite = encoder.beginCollection(descriptor, size) | ||
val iterator = value.collectionIterator() | ||
for (index in 0 until size) | ||
composite.encodeSerializableElement(descriptor, index, elementSerializer, iterator.next()) | ||
composite.endStructure(descriptor) | ||
encoder.encodeCollection(descriptor, size) { | ||
val iterator = value.collectionIterator() | ||
for (index in 0 until size) | ||
encodeSerializableElement(descriptor, index, elementSerializer, iterator.next()) | ||
This comment has been minimized.
Sorry, something went wrong.
slavonnet
|
||
} | ||
} | ||
|
||
protected final override fun readAll(decoder: CompositeDecoder, builder: Builder, startIndex: Int, size: Int) { | ||
|
@@ -115,14 +115,14 @@ public sealed class MapLikeSerializer<Key, Value, Collection, Builder : MutableM | |
|
||
override fun serialize(encoder: Encoder, value: Collection) { | ||
val size = value.collectionSize() | ||
val composite = encoder.beginCollection(descriptor, size) | ||
val iterator = value.collectionIterator() | ||
var index = 0 | ||
iterator.forEach { (k, v) -> | ||
composite.encodeSerializableElement(descriptor, index++, keySerializer, k) | ||
composite.encodeSerializableElement(descriptor, index++, valueSerializer, v) | ||
encoder.encodeCollection(descriptor, size) { | ||
val iterator = value.collectionIterator() | ||
var index = 0 | ||
iterator.forEach { (k, v) -> | ||
encodeSerializableElement(descriptor, index++, keySerializer, k) | ||
encodeSerializableElement(descriptor, index++, valueSerializer, v) | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
pdvrieze
Contributor
|
||
} | ||
} | ||
composite.endStructure(descriptor) | ||
} | ||
} | ||
|
||
|
@@ -171,9 +171,9 @@ internal abstract class PrimitiveArraySerializer<Element, Array, Builder | |
|
||
final override fun serialize(encoder: Encoder, value: Array) { | ||
val size = value.collectionSize() | ||
val composite = encoder.beginCollection(descriptor, size) | ||
writeContent(composite, value, size) | ||
composite.endStructure(descriptor) | ||
encoder.encodeCollection(descriptor, size) { | ||
writeContent(this, value, size) | ||
} | ||
} | ||
|
||
final override fun deserialize(decoder: Decoder): Array = merge(decoder, null) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package kotlinx.serialization | ||
|
||
import kotlinx.serialization.builtins.ListSerializer | ||
import kotlinx.serialization.builtins.serializer | ||
import kotlinx.serialization.descriptors.* | ||
import kotlinx.serialization.encoding.* | ||
import kotlinx.serialization.json.* | ||
import kotlin.test.* | ||
|
||
class EncodingCollectionsTest { | ||
object ListSerializer : KSerializer<List<String>> { | ||
override val descriptor: SerialDescriptor = ListSerializer(String.serializer()).descriptor | ||
|
||
override fun serialize(encoder: Encoder, value: List<String>) { | ||
encoder.encodeCollection(descriptor, value) { index, item -> | ||
encodeStringElement(descriptor, index, item) | ||
} | ||
} | ||
|
||
override fun deserialize(decoder: Decoder): List<String> = throw NotImplementedError() | ||
} | ||
|
||
@Test | ||
fun testEncoding() { | ||
assertEquals("""["Hello","World!"]""", Json.encodeToString(ListSerializer, listOf("Hello", "World!"))) | ||
} | ||
} |
performance issues ? asSequence or reduce ?