Reinis Muiznieks
02/04/2021, 5:58 PMprivate class InternalParamDefinition {
var id = 0
var type: Byte = 0
var defaultValue: Any? = null
}
object ParamLoader {
@JvmStatic
fun load(id: Int, bytes: ByteArray): ParamDefinition {
fun createInternal(): InternalParamDefinition {
val param = InternalParamDefinition()
param.id = id
val buffer = PacketBuffer(bytes)
while (true) {
when (buffer.unsignedByte) {
0 -> return param
1 -> param.type = buffer.byte
2 -> param.defaultValue = <http://buffer.int|buffer.int>
3 -> param.defaultValue = buffer.string
else -> throw IllegalStateException("unknown field type")
}
}
}
val internalParam = createInternal()
return ParamDefinition(
id = internalParam.id,
defaultValue = internalParam.defaultValue,
type = internalParam.type
)
}
}
I have heard ideas about using Protobuf. Maybe there is some better way to do this?edrd
02/04/2021, 11:49 PMfold
+ `copy`:
data class ParamDefinition(
val id = 0,
val type: Byte = 0,
val defaultValue: Any? = null
)
return bytes.fold(ParamDefinition()) { param, byte ->
when (byte /* unsigned logic missing */) {
0 -> return@load param
1 -> param.copy(type = buffer.byte)
2 -> param.copy(defaultValue = <http://buffer.int|buffer.int>)
3 -> param.copy(defaultValue = buffer.string)
else -> error("unknown field type")
}
}
Reinis Muiznieks
02/05/2021, 11:05 AMReinis Muiznieks
02/05/2021, 11:06 AMedrd
02/05/2021, 2:43 PM