public fun decode()

in aws-runtime/protocols/aws-event-stream/common/src/aws/sdk/kotlin/runtime/protocol/eventstream/HeaderValue.kt [117:149]


        public fun decode(buffer: Buffer): HeaderValue {
            val type = buffer.readByte().let { HeaderType.fromTypeId(it) }
            return when (type) {
                HeaderType.TRUE -> HeaderValue.Bool(true)
                HeaderType.FALSE -> HeaderValue.Bool(false)
                HeaderType.BYTE -> HeaderValue.Byte(buffer.readByte().toUByte())
                HeaderType.INT16 -> HeaderValue.Int16(buffer.readShort())
                HeaderType.INT32 -> HeaderValue.Int32(buffer.readInt())
                HeaderType.INT64 -> HeaderValue.Int64(buffer.readLong())
                HeaderType.BYTE_ARRAY, HeaderType.STRING -> {
                    val len = buffer.readUShort()
                    if (buffer.readRemaining < len.toULong()) {
                        throw IllegalStateException("Invalid HeaderValue; type=$type, len=$len; readRemaining: ${buffer.readRemaining}")
                    }
                    val bytes = ByteArray(len.toInt())
                    buffer.readFully(bytes)
                    when (type) {
                        HeaderType.STRING -> HeaderValue.String(bytes.decodeToString())
                        HeaderType.BYTE_ARRAY -> HeaderValue.ByteArray(bytes)
                        else -> throw IllegalStateException("Invalid HeaderValue")
                    }
                }
                HeaderType.TIMESTAMP -> {
                    val epochMilli = buffer.readLong()
                    HeaderValue.Timestamp(Instant.fromEpochMilliseconds(epochMilli))
                }
                HeaderType.UUID -> {
                    val high = buffer.readLong()
                    val low = buffer.readLong()
                    HeaderValue.Uuid(Uuid(high, low))
                }
            }
        }