diff --git a/CHANGELOG.md b/CHANGELOG.md index f0ec52d7e09..418bd7e36fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## 0.4.23 +* `Serialization` + * `Base64` + * New serializer `Base64BytesToFromStringSerializer` has been added + ## 0.4.22 * `Versions`: diff --git a/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64BytesToFromStringSerializer.kt b/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64BytesToFromStringSerializer.kt new file mode 100644 index 00000000000..eeb5bf63788 --- /dev/null +++ b/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64BytesToFromStringSerializer.kt @@ -0,0 +1,17 @@ +package dev.inmo.micro_utils.serialization.base64 + +import dev.inmo.micro_utils.crypto.* +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +/** + * Converts [ByteArray] into base64 encoded string due to serialization and decode base64 encoded string into bytes + */ +object Base64BytesToFromStringSerializer: KSerializer { + override val descriptor: SerialDescriptor = String.serializer().descriptor + override fun deserialize(decoder: Decoder): SourceBytes = decoder.decodeString().decodeBase64() + override fun serialize(encoder: Encoder, value: SourceBytes) = encoder.encodeString(value.encodeBase64String()) +} \ No newline at end of file diff --git a/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64Serializer.kt b/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64Serializer.kt index 435730f24ac..b63d05a5815 100644 --- a/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64Serializer.kt +++ b/serialization/base64/src/commonMain/kotlin/dev/inmo/micro_utils/serialization/base64/Base64Serializer.kt @@ -1,9 +1,6 @@ package dev.inmo.micro_utils.serialization.base64 -import dev.inmo.micro_utils.crypto.* import kotlinx.serialization.KSerializer -import kotlinx.serialization.Serializer -import kotlinx.serialization.builtins.serializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder @@ -12,9 +9,9 @@ open class Base64Serializer( private val converterFrom: (T) -> String, private val converterTo: (String) -> T, ) : KSerializer { - override val descriptor: SerialDescriptor = String.serializer().descriptor - override fun deserialize(decoder: Decoder): T = converterTo(decoder.decodeString().decodeBase64String()) - override fun serialize(encoder: Encoder, value: T) = encoder.encodeString(converterFrom(value).encodeBase64String()) + override val descriptor: SerialDescriptor = Base64BytesToFromStringSerializer.descriptor + override fun deserialize(decoder: Decoder): T = converterTo(Base64BytesToFromStringSerializer.deserialize(decoder).decodeToString()) + override fun serialize(encoder: Encoder, value: T) = Base64BytesToFromStringSerializer.serialize(encoder, converterFrom(value).encodeToByteArray()) } object Base64StringSerializer : Base64Serializer({ it }, { it })