github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/general/encode_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 generalStructEncoder struct {
     9  }
    10  
    11  func (encoder *generalStructEncoder) Encode(val interface{}, stream spi.Stream) {
    12  	writeStruct(val, stream)
    13  }
    14  
    15  func (encoder *generalStructEncoder) ThriftType() protocol.TType {
    16  	return protocol.TypeStruct
    17  }
    18  
    19  func writeStruct(val interface{}, stream spi.Stream) {
    20  	obj := val.(Struct)
    21  	stream.WriteStructHeader()
    22  	for fieldId, elem := range obj {
    23  		fieldType, generalWriter := generalWriterOf(elem)
    24  		stream.WriteStructField(fieldType, fieldId)
    25  		generalWriter(elem, stream)
    26  	}
    27  	stream.WriteStructFieldStop()
    28  }