github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/general/encode.go (about)

     1  package general
     2  
     3  import (
     4  	"github.com/batchcorp/thrift-iterator/spi"
     5  	"github.com/batchcorp/thrift-iterator/protocol"
     6  	"reflect"
     7  )
     8  
     9  func generalWriterOf(sample interface{}) (protocol.TType, func(val interface{}, stream spi.Stream)) {
    10  	switch sample.(type) {
    11  	case bool:
    12  		return protocol.TypeBool, writeBool
    13  	case int8:
    14  		return protocol.TypeI08, writeInt8
    15  	case uint8:
    16  		return protocol.TypeI08, writeUint8
    17  	case int16:
    18  		return protocol.TypeI16, writeInt16
    19  	case uint16:
    20  		return protocol.TypeI16, writeUint16
    21  	case int32:
    22  		return protocol.TypeI32, writeInt32
    23  	case uint32:
    24  		return protocol.TypeI32, writeUint32
    25  	case int64:
    26  		return protocol.TypeI64, writeInt64
    27  	case uint64:
    28  		return protocol.TypeI64, writeUint64
    29  	case float64:
    30  		return protocol.TypeDouble, writeFloat64
    31  	case string:
    32  		return protocol.TypeString, writeString
    33  	case []byte:
    34  		return protocol.TypeString, writeBinary
    35  	case List:
    36  		return protocol.TypeList, writeList
    37  	case Map:
    38  		return protocol.TypeMap, writeMap
    39  	case Struct:
    40  		return protocol.TypeStruct, writeStruct
    41  	default:
    42  		panic("unsupported type: " + reflect.TypeOf(sample).String())
    43  	}
    44  }
    45  
    46  func writeBool(val interface{}, stream spi.Stream) {
    47  	stream.WriteBool(val.(bool))
    48  }
    49  
    50  func writeInt8(val interface{}, stream spi.Stream) {
    51  	stream.WriteInt8(val.(int8))
    52  }
    53  
    54  func writeUint8(val interface{}, stream spi.Stream) {
    55  	stream.WriteUint8(val.(uint8))
    56  }
    57  
    58  func writeInt16(val interface{}, stream spi.Stream) {
    59  	stream.WriteInt16(val.(int16))
    60  }
    61  
    62  func writeUint16(val interface{}, stream spi.Stream) {
    63  	stream.WriteUint16(val.(uint16))
    64  }
    65  
    66  func writeInt32(val interface{}, stream spi.Stream) {
    67  	stream.WriteInt32(val.(int32))
    68  }
    69  
    70  func writeUint32(val interface{}, stream spi.Stream) {
    71  	stream.WriteUint32(val.(uint32))
    72  }
    73  
    74  func writeInt64(val interface{}, stream spi.Stream) {
    75  	stream.WriteInt64(val.(int64))
    76  }
    77  
    78  func writeUint64(val interface{}, stream spi.Stream) {
    79  	stream.WriteUint64(val.(uint64))
    80  }
    81  
    82  func writeFloat64(val interface{}, stream spi.Stream) {
    83  	stream.WriteFloat64(val.(float64))
    84  }
    85  
    86  func writeString(val interface{}, stream spi.Stream) {
    87  	stream.WriteString(val.(string))
    88  }
    89  
    90  func writeBinary(val interface{}, stream spi.Stream) {
    91  	stream.WriteBinary(val.([]byte))
    92  }