github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/decoder.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 Decoder struct { 12 cfg *frozenConfig 13 iter spi.Iterator 14 } 15 16 func (decoder *Decoder) Decode(val interface{}) error { 17 cfg := decoder.cfg 18 valType := reflect.TypeOf(val) 19 valDecoder := cfg.getGenDecoder(valType) 20 if valDecoder == nil { 21 valDecoder = cfg.decoderOf(valType) 22 cfg.addGenDecoder(valType, valDecoder) 23 } 24 valDecoder.Decode(val, decoder.iter) 25 if decoder.iter.Error() != nil { 26 return decoder.iter.Error() 27 } 28 return nil 29 } 30 31 func (decoder *Decoder) DecodeMessage() (general.Message, error) { 32 var msg general.Message 33 err := decoder.Decode(&msg) 34 return msg, err 35 } 36 37 func (decoder *Decoder) DecodeMessageHeader() (protocol.MessageHeader, error) { 38 var msgHeader protocol.MessageHeader 39 err := decoder.Decode(&msgHeader) 40 return msgHeader, err 41 } 42 43 func (decoder *Decoder) DecodeMessageArguments() (general.Struct, error) { 44 var msgArgs general.Struct 45 err := decoder.Decode(&msgArgs) 46 return msgArgs, err 47 } 48 49 func (decoder *Decoder) Reset(reader io.Reader, buf []byte) { 50 decoder.iter.Reset(reader, buf) 51 }