blob: 6e0998fb7ee5f4d27105e20992608f232380d28b [file] [log] [blame]
package com.google.chip.chiptool.util
import matter.tlv.AnonymousTag
import matter.tlv.ArrayValue
import matter.tlv.NullValue
import matter.tlv.StructureValue
import matter.tlv.Tag
import matter.tlv.TlvReader
/**
* Encodes TLV into kotlin Object. If the TLV reader is positioned TLV Structure, Object will return
* to json format.
*/
fun TlvReader.toAny(tag: Tag = AnonymousTag): Any? {
val element = peekElement()
val value = element.value
value.toAny()?.let {
skipElement()
return it
}
return when (value) {
is ArrayValue -> {
buildList<Any?> {
enterArray(tag)
while (!isEndOfTlv() && !isEndOfContainer()) {
add(toAny())
}
exitContainer()
}
}
is StructureValue -> {
buildMap<Tag, Any?> {
enterStructure(tag)
while (!isEndOfTlv() && !isEndOfContainer()) {
put(getTag(), toAny(getTag()))
}
exitContainer()
}
}
is NullValue -> {
skipElement()
null
}
else -> {
skipElement()
null
}
}
}
private fun TlvReader.getTag(): Tag {
return peekElement().tag
}