github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/general/decode_struct.go (about) 1 package general 2 3 import ( 4 "github.com/batchcorp/thrift-iterator/spi" 5 "github.com/batchcorp/thrift-iterator/protocol" 6 ) 7 8 type generalStructDecoder struct { 9 } 10 11 func (decoder *generalStructDecoder) Decode(val interface{}, iter spi.Iterator) { 12 *val.(*Struct) = readStruct(iter).(Struct) 13 } 14 15 func readStruct(iter spi.Iterator) interface{} { 16 generalStruct := Struct{} 17 iter.ReadStructHeader() 18 for { 19 fieldType, fieldId := iter.ReadStructField() 20 if fieldType == protocol.TypeStop { 21 return generalStruct 22 } 23 generalReader := generalReaderOf(fieldType) 24 generalStruct[fieldId] = generalReader(iter) 25 } 26 }