robgray
09/16/2019, 2:06 PM@kotlinx.serialization.Serializable(TestEnum.TestEnumSerializer::class)
enum class TestEnum(val value: Int) {
RED(0),
GREEN(1),
BLUE(2);
@Serializer(forClass = TestEnum::class)
companion object TestEnumSerializer : KSerializer<TestEnum> {
private val map = values().associateBy(TestEnum::value)
override val descriptor: SerialDescriptor
get() = StringDescriptor
override fun deserialize(decoder: Decoder): TestEnum {
return map.getValue(decoder.decodeInt())
}
override fun serialize(encoder: Encoder, obj: TestEnum) {
encoder.encodeInt(obj.value)
}
}
}
Nikky
09/16/2019, 3:42 PMTestEnum?
and then you can use map.get(decoder.decodeInt()) ?: null
i thinkrobgray
09/16/2019, 3:44 PMCan't serialize non-nullable field of type TestEnum with nullable serializer TestEnumSerializer
turansky
09/16/2019, 3:57 PMKSerializer<TestEnum>
-> KSerializer<TestEnum?>
robgray
09/16/2019, 4:42 PM@kotlinx.serialization.Serializable(TestEnum.TestEnumSerializer::class)
enum class TestEnum(val value: Int) {
RED(0),
GREEN(1),
BLUE(2);
@Serializer(forClass = TestEnum::class)
companion object TestEnumSerializer : KSerializer<TestEnum?> {
private val map = values().associateBy(TestEnum::value)
override val descriptor: SerialDescriptor
get() = StringDescriptor
override fun deserialize(decoder: Decoder): TestEnum? {
return map[decoder.decodeInt()]
}
override fun serialize(encoder: Encoder, obj: TestEnum?) {
obj?.value?.let { encoder.encodeInt(it) }
}
}
}
robgray
09/16/2019, 4:42 PMrobgray
09/17/2019, 11:51 AM