dimitar_
06/16/2021, 3:00 PMobject LongRangeSerializer: KSerializer<LongRange> {
override val descriptor = buildClassSerialDescriptor("LongRange") {
element<Long>("first")
element<Long>("last")
}
override fun deserialize(decoder: Decoder): LongRange {
var first = 0L
var last = 0L
decoder.decodeStructure(descriptor) {
first = decodeLongElement(descriptor, 0)
last = decodeLongElement(descriptor, 1)
}
return first..last
}
override fun serialize(encoder: Encoder, value: LongRange) {
encoder.encodeStructure(descriptor) {
encodeLongElement(descriptor, 0, value.first)
encodeLongElement(descriptor, 1, value.last)
}
}
}
And I tried:
@Serializable class Container(@Serializable(with = LongRangeSerializer::class) val ranges: Array<LongRange>)
with no luck.
Can't seem to find any pointers anywhere. Tried using a List also, tried also with @Contextual
- same issue.
The error is: Kotlin: Serializer has not been found for type 'LongRange'. To use context serializer as fallback, explicitly annotate type or property with @Contextual
diesieben07
06/16/2021, 3:08 PMArray<LongRange>
so you need to give it a serializer for arrays, not LongRange
. In this case ArraySerializer
. However that is a top level function, so not sure how to use it with Serializable(with = )
dimitar_
06/16/2021, 3:13 PM@Contextual
the compiler gives the same error.ephemient
06/16/2021, 3:44 PMval ranges: Array<@Serializable(with = LongRangeSerializer::class) LongRange>
to workephemient
06/16/2021, 3:44 PM@file:UseSerializers
is finedimitar_
06/16/2021, 6:19 PM