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 }