From 759a3f2784dab7bbdaf6ae87b13529191c1c6e87 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 4 Jan 2024 10:24:39 +0600 Subject: [PATCH] make it possible to use encoder inside of serialize callback --- .../kotlin/MapperSerializationStrategy.kt | 13 ++++++++----- .../src/commonMain/kotlin/MapperSerializer.kt | 14 +++++++++++++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/serialization/mapper/src/commonMain/kotlin/MapperSerializationStrategy.kt b/serialization/mapper/src/commonMain/kotlin/MapperSerializationStrategy.kt index 4772932915c..e3b5e1a48f8 100644 --- a/serialization/mapper/src/commonMain/kotlin/MapperSerializationStrategy.kt +++ b/serialization/mapper/src/commonMain/kotlin/MapperSerializationStrategy.kt @@ -1,9 +1,7 @@ package dev.inmo.micro_utils.serialization.mapper -import kotlinx.serialization.KSerializer import kotlinx.serialization.SerializationStrategy import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder /** @@ -11,15 +9,20 @@ import kotlinx.serialization.encoding.Encoder * serialization * * @param base Serializer for [I] - * @param serialize Will be used in [serialize] method to convert incoming [O] to [I] and serialize with [base] + * @param internalSerialize Will be used in [internalSerialize] method to convert incoming [O] to [I] and serialize with [base] */ open class MapperSerializationStrategy( private val base: SerializationStrategy, - private val serialize: (O) -> I + private val internalSerialize: (Encoder, O) -> I ) : SerializationStrategy { override val descriptor: SerialDescriptor = base.descriptor + constructor( + base: SerializationStrategy, + serialize: (O) -> I + ) : this(base, { _, o -> serialize(o) }) + override fun serialize(encoder: Encoder, value: O) { - base.serialize(encoder, serialize(value)) + base.serialize(encoder, internalSerialize(encoder, value)) } } diff --git a/serialization/mapper/src/commonMain/kotlin/MapperSerializer.kt b/serialization/mapper/src/commonMain/kotlin/MapperSerializer.kt index acc8cbb178a..08d2ccee903 100644 --- a/serialization/mapper/src/commonMain/kotlin/MapperSerializer.kt +++ b/serialization/mapper/src/commonMain/kotlin/MapperSerializer.kt @@ -17,7 +17,7 @@ import kotlinx.serialization.encoding.Encoder */ open class MapperSerializer( private val base: KSerializer, - private val serialize: (O) -> I, + private val serialize: (Encoder, O) -> I, private val deserialize: (Decoder, I) -> O ) : KSerializer, DeserializationStrategy by MapperDeserializationStrategy(base, deserialize), @@ -28,5 +28,17 @@ open class MapperSerializer( base: KSerializer, serialize: (O) -> I, deserialize: (I) -> O + ) : this(base, { _, o -> serialize(o) }, { _, i -> deserialize(i) }) + + constructor( + base: KSerializer, + serialize: (Encoder, O) -> I, + deserialize: (I) -> O ) : this(base, serialize, { _, i -> deserialize(i) }) + + constructor( + base: KSerializer, + serialize: (O) -> I, + deserialize: (Decoder, I) -> O + ) : this(base, { _, o -> serialize(o) }, deserialize) }