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  }