fixup! Switch from gson to kotlinx.serialization
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
package com.aurora.store.module
|
package com.aurora.store.module
|
||||||
|
|
||||||
|
import com.aurora.store.data.serializers.LocaleSerializer
|
||||||
|
import com.aurora.store.data.serializers.PropertiesSerializer
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
|
import kotlinx.serialization.modules.SerializersModule
|
||||||
|
import kotlinx.serialization.modules.contextual
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@@ -14,10 +18,16 @@ object CommonModule {
|
|||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
fun providesJsonInstance(): Json {
|
fun providesJsonInstance(): Json {
|
||||||
|
val module = SerializersModule {
|
||||||
|
contextual(LocaleSerializer)
|
||||||
|
contextual(PropertiesSerializer)
|
||||||
|
}
|
||||||
|
|
||||||
return Json {
|
return Json {
|
||||||
prettyPrint = true
|
prettyPrint = true
|
||||||
ignoreUnknownKeys = true
|
ignoreUnknownKeys = true
|
||||||
coerceInputValues = true
|
coerceInputValues = true
|
||||||
|
serializersModule = module
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user