github.com/batchcorp/thrift-iterator@v0.0.0-20220918180557-4c4a158fc6e9/general/decode_map.go (about)

     1  package general
     2  
     3  import "github.com/batchcorp/thrift-iterator/spi"
     4  
     5  type generalMapDecoder struct {
     6  }
     7  
     8  func (decoder *generalMapDecoder) Decode(val interface{}, iter spi.Iterator) {
     9  	*val.(*Map) = readMap(iter).(Map)
    10  }
    11  
    12  func readMap(iter spi.Iterator) interface{} {
    13  	keyType, elemType, length := iter.ReadMapHeader()
    14  	generalMap := Map{}
    15  	if length == 0 {
    16  		return generalMap
    17  	}
    18  	keyReader := generalReaderOf(keyType)
    19  	elemReader := generalReaderOf(elemType)
    20  	for i := 0; i < length; i++ {
    21  		key := keyReader(iter)
    22  		elem := elemReader(iter)
    23  		generalMap[key] = elem
    24  	}
    25  	return generalMap
    26  }