I have a set of classes that implement Parcelable and are annotated by @Parcelize.
These classes are serialized to byte arrays like this:
return Parcel
.obtain()
.let { parcel ->
writeToParcel(parcel, 0) // "this" is the Parcelable object
parcel
.marshall()
.also { parcel.recycle() }
}
And I want to create a generic deserialization method to create an instance of class from a byte array:
fun <T> create(data: ByteArray): T {
val parcel = parse(data)
TODO("???")
}
private fun parse(data: ByteArray): Parcel {
return Parcel
.obtain()
.apply {
unmarshall(data, 0, data.size)
setDataPosition(0)
}
}
So, how can I read a generic Parcelable from a Parcel?
Yes, I know that I can use Parcelable.Creator, but how should I get it from the code generated by @Parcelize?