I am attempting to deserialize a YAML config that has mono/multilingual strings in multiple places, such as:
key1: File
# or
key2:
en_US: File
de_DE: Datei
Using kotlinx.serialization
and charleskorn’s KAML (which adds YAML support for the former), I want to deserialize this into objects such as:
@Serializable
sealed interface LingualString {
// the actual code uses java.util.Locale; this is simplified
operator fun get(locale: String): String
}
@Serializable
class MonolingualString(
private val text: String
) : LingualString {
override operator fun get(locale: String) = text
}
@Serializable
class MultilingualString(
private val map: Map<String, String>
) : LingualString {
override operator fun get(locale: String) = map[locale]!!
}
How do I write a KSerializer<LingualString>
that can load such values from the config?
2