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  }