github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/general/encode_list.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 generalListEncoder struct {
     9  }
    10  
    11  func (encoder *generalListEncoder) Encode(val interface{}, stream spi.Stream) {
    12  	writeList(val, stream)
    13  }
    14  
    15  func (encoder *generalListEncoder) ThriftType() protocol.TType {
    16  	return protocol.TypeList
    17  }
    18  
    19  func writeList(val interface{}, stream spi.Stream) {
    20  	obj := val.(List)
    21  	length := len(obj)
    22  	if length == 0 {
    23  		stream.WriteListHeader(protocol.TypeI64, 0)
    24  		return
    25  	}
    26  	elemType, generalWriter := generalWriterOf(obj[0])
    27  	stream.WriteListHeader(elemType, length)
    28  	for _, elem := range obj {
    29  		generalWriter(elem, stream)
    30  	}
    31  }