eygraber
07/28/2021, 5:02 AMclass Test<T>(val t: T) {
val serializer = T::class.serializer() // I know this doesn't work
}
edenman
07/28/2021, 5:31 AMserializer<T>()
in the serialization libraryedenman
07/28/2021, 5:32 AMedenman
07/28/2021, 5:32 AMimport kotlinx.serialization.serializer
to be specific about where it liveseygraber
07/28/2021, 6:35 AMserializer()
is reified, so I can't use T
for that.ephemient
07/28/2021, 8:33 AMclass Test<T>(val t: T, private val serializer: KSerializer<T>)
inline fun <reified T> Test(t: T) = Test(t, serializer())
eygraber
07/28/2021, 2:16 PMserializer()
.
I figured there isn't a way to do this because of erasure, but I wanted to check just to make sure I didn't miss anything.eygraber
07/28/2021, 2:21 PMinline fun <reified T> Test(t: T) = Test(t, serializer())
class Test<T> private constructor(val t: T, private val serializer: KSerializer<T>)
eygraber
07/28/2021, 3:49 PMedenman
07/28/2021, 8:51 PMeygraber
07/28/2021, 9:58 PMabstract class Node<State>(initialState: State) {
private val currentState = MutableStateFlow(initialState)
private val serializer: KSerializer<State> = // what goes here
// StateSerializer takes State and KSerializer and serializes to a ByteArray
fun serializeCurrentState(stateSerializer: StateSerializer) = stateSerializer.serialize(currentState.value, serializer)
}
The caller of serializeCurrentState
doesn't know what State
is.eygraber
07/28/2021, 9:59 PMKSerializer
to the constructor, but I'm trying to keep the API as simple as possible.ephemient
07/28/2021, 10:03 PMabstract class Node<State>(initialState: State) {
protected abstract val serializer: KSerializer<State>
}
class NodeImpl(initialState: State) : Node<State>(initialState) {
override val serializer: KSerializer<State> get() = State.serializer()
}
ephemient
07/28/2021, 10:04 PMinitialState::class.serializer()
, but there's cases where that won't work, such as if the type has generics or if it needs serializers registered in a moduleeygraber
07/28/2021, 10:34 PMinitialState::class.serializer()
but it couldn't find that function. I'm assuming it's because State
is erased to Any
eygraber
07/28/2021, 10:36 PMephemient
07/28/2021, 10:44 PMfun <T : Any> KClass<T>.serializer(): KSerializer<T>
existsephemient
07/28/2021, 10:45 PMeygraber
07/29/2021, 1:36 AM