fix locale serialization issue
This commit is contained in:
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.aurora.store.module
|
package com.aurora.store.module
|
||||||
|
|
||||||
import com.aurora.store.data.serializers.LocaleSerializer
|
import com.aurora.gplayapi.data.serializers.LocaleSerializer
|
||||||
import com.aurora.store.data.serializers.PropertiesSerializer
|
import com.aurora.gplayapi.data.serializers.PropertiesSerializer
|
||||||
import dagger.Module
|
import dagger.Module
|
||||||
import dagger.Provides
|
import dagger.Provides
|
||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
|
|||||||
Reference in New Issue
Block a user