github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/general/general_extension.go (about) 1 package general 2 3 import ( 4 "reflect" 5 "github.com/batchcorp/thrift-iterator/spi" 6 "github.com/batchcorp/thrift-iterator/protocol" 7 ) 8 9 type Extension struct { 10 } 11 12 func (ext *Extension) EncoderOf(valType reflect.Type) spi.ValEncoder { 13 switch valType { 14 case reflect.TypeOf(List(nil)): 15 return &generalListEncoder{} 16 case reflect.TypeOf(Map(nil)): 17 return &generalMapEncoder{} 18 case reflect.TypeOf(Struct(nil)): 19 return &generalStructEncoder{} 20 case reflect.TypeOf((*Message)(nil)).Elem(): 21 return &messageEncoder{} 22 case reflect.TypeOf((*protocol.MessageHeader)(nil)).Elem(): 23 return &messageHeaderEncoder{} 24 } 25 return nil 26 } 27 28 func (ext *Extension) DecoderOf(valType reflect.Type) spi.ValDecoder { 29 switch valType { 30 case reflect.TypeOf((*List)(nil)): 31 return &generalListDecoder{} 32 case reflect.TypeOf((*Map)(nil)): 33 return &generalMapDecoder{} 34 case reflect.TypeOf((*Struct)(nil)): 35 return &generalStructDecoder{} 36 case reflect.TypeOf((*Message)(nil)): 37 return &messageDecoder{} 38 case reflect.TypeOf((*protocol.MessageHeader)(nil)): 39 return &messageHeaderDecoder{} 40 } 41 return nil 42 }