fixup! Switch from gson to kotlinx.serialization

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-05-19 19:36:13 +08:00
parent eda01a6ec0
commit 9f8fc4b296
3 changed files with 98 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
/*
* SPDX-FileCopyrightText: 2025 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.data.serializers
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
import kotlinx.serialization.descriptors.element
import kotlinx.serialization.encoding.CompositeDecoder
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.encoding.decodeStructure
import kotlinx.serialization.encoding.encodeStructure
import java.util.Locale
/**
* Serializer for [Locale] for working with Kotlin's Serialization library
*/
object LocaleSerializer : KSerializer<Locale> {
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("Locale") {
element<String>("language")
element<String>("region")
}
override fun serialize(encoder: Encoder, value: Locale) {
return encoder.encodeStructure(descriptor) {
encodeStringElement(descriptor, 0, value.language)
encodeStringElement(descriptor, 1, value.country)
}
}
override fun deserialize(decoder: Decoder): Locale {
return decoder.decodeStructure(descriptor) {
var language: String? = null
var region: String? = null
while (true) {
when (val index = decodeElementIndex(descriptor)) {
0 -> language = decodeStringElement(descriptor, 0)
1 -> region = decodeStringElement(descriptor, 1)
CompositeDecoder.DECODE_DONE -> break
else -> error("Unexpected index: $index")
}
}
require(!language.isNullOrBlank() && !region.isNullOrBlank())
Locale.Builder()
.setLanguage(language)
.setRegion(region)
.build()
}
}
}

View File

@@ -0,0 +1,32 @@
/*
* SPDX-FileCopyrightText: 2025 The Calyx Institute
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package com.aurora.store.data.serializers
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.util.Properties
/**
* Serializer for [Properties] for working with Kotlin's Serialization library
*/
object PropertiesSerializer : KSerializer<Properties> {
override val descriptor: SerialDescriptor =
MapSerializer(String.serializer(), String.serializer()).descriptor
override fun serialize(encoder: Encoder, value: Properties) {
val map = value.stringPropertyNames().associateWith { value.getProperty(it) }
MapSerializer(String.serializer(), String.serializer()).serialize(encoder, map)
}
override fun deserialize(decoder: Decoder): Properties {
val map = MapSerializer(String.serializer(), String.serializer()).deserialize(decoder)
return Properties().apply { putAll(map) }
}
}

View File

@@ -1,10 +1,14 @@
package com.aurora.store.module
import com.aurora.store.data.serializers.LocaleSerializer
import com.aurora.store.data.serializers.PropertiesSerializer
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.contextual
import javax.inject.Singleton
@Module
@@ -14,10 +18,16 @@ object CommonModule {
@Singleton
@Provides
fun providesJsonInstance(): Json {
val module = SerializersModule {
contextual(LocaleSerializer)
contextual(PropertiesSerializer)
}
return Json {
prettyPrint = true
ignoreUnknownKeys = true
coerceInputValues = true
serializersModule = module
}
}
}