github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/encoder.go (about) 1 package thrifter 2 3 import ( 4 "github.com/batchcorp/thrift-iterator/general" 5 "github.com/batchcorp/thrift-iterator/protocol" 6 "github.com/batchcorp/thrift-iterator/spi" 7 "io" 8 "reflect" 9 ) 10 11 type Encoder struct { 12 cfg *frozenConfig 13 stream spi.Stream 14 } 15 16 func (encoder *Encoder) Encode(val interface{}) error { 17 cfg := encoder.cfg 18 valType := reflect.TypeOf(val) 19 valEncoder := cfg.getGenEncoder(valType) 20 if valEncoder == nil { 21 valEncoder = cfg.encoderOf(valType) 22 cfg.addGenEncoder(valType, valEncoder) 23 } 24 valEncoder.Encode(val, encoder.stream) 25 encoder.stream.Flush() 26 if encoder.stream.Error() != nil { 27 return encoder.stream.Error() 28 } 29 return nil 30 } 31 32 func (encoder *Encoder) EncodeMessage(msg general.Message) error { 33 return encoder.Encode(msg) 34 } 35 36 func (encoder *Encoder) EncodeMessageHeader(msgHeader protocol.MessageHeader) error { 37 return encoder.Encode(msgHeader) 38 } 39 40 func (encoder *Encoder) EncodeMessageArguments(msgArgs general.Struct) error { 41 return encoder.Encode(msgArgs) 42 } 43 44 func (encoder *Encoder) Reset(writer io.Writer) { 45 encoder.stream.Reset(writer) 46 } 47 48 func (encoder *Encoder) Buffer() []byte { 49 return encoder.stream.Buffer() 50 }