fix locale serialization issue

This commit is contained in:
Rahul Patel
2025-05-27 18:18:15 +05:30
parent 4729083844
commit 0d05c7ad08
3 changed files with 2 additions and 90 deletions

View File

@@ -1,56 +0,0 @@
/*
* 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

@@ -1,32 +0,0 @@
/*
* 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,7 +1,7 @@
package com.aurora.store.module
import com.aurora.store.data.serializers.LocaleSerializer
import com.aurora.store.data.serializers.PropertiesSerializer
import com.aurora.gplayapi.data.serializers.LocaleSerializer
import com.aurora.gplayapi.data.serializers.PropertiesSerializer
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn