in crumb-compiler/src/main/kotlin/com/uber/crumb/internal/wire/internal/RuntimeMessageAdapter.kt [111:141]
override fun decode(reader: ProtoReader): M {
val builder = newBuilder()
val token = reader.beginMessage()
while (true) {
val tag = reader.nextTag()
if (tag == -1) break
val fieldBinding = fieldBindings[tag]
try {
if (fieldBinding != null) {
val adapter = if (fieldBinding.isMap) {
fieldBinding.adapter()
} else {
fieldBinding.singleAdapter()
}
val value = adapter.decode(reader)
fieldBinding.value(builder, value!!)
} else {
val fieldEncoding = reader.peekFieldEncoding()!!
val value = fieldEncoding.rawProtoAdapter().decode(reader)
builder.addUnknownField(tag, fieldEncoding, value)
}
} catch (e: EnumConstantNotFoundException) {
// An unknown Enum value was encountered, store it as an unknown field.
builder.addUnknownField(tag, FieldEncoding.VARINT, e.value.toLong())
}
}
reader.endMessageAndGetUnknownFields(token) // Ignore return value
return builder.build()
}