...

Source file src/github.com/gin-gonic/contrib/cache/serializer.go

Documentation: github.com/gin-gonic/contrib/cache

     1  package cache
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/gob"
     6  	"reflect"
     7  	"strconv"
     8  )
     9  
    10  func serialize(value interface{}) ([]byte, error) {
    11  	if bytes, ok := value.([]byte); ok {
    12  		return bytes, nil
    13  	}
    14  
    15  	switch v := reflect.ValueOf(value); v.Kind() {
    16  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    17  		return []byte(strconv.FormatInt(v.Int(), 10)), nil
    18  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
    19  		return []byte(strconv.FormatUint(v.Uint(), 10)), nil
    20  	}
    21  
    22  	var b bytes.Buffer
    23  	encoder := gob.NewEncoder(&b)
    24  	if err := encoder.Encode(value); err != nil {
    25  		return nil, err
    26  	}
    27  	return b.Bytes(), nil
    28  }
    29  
    30  func deserialize(byt []byte, ptr interface{}) (err error) {
    31  	if bytes, ok := ptr.(*[]byte); ok {
    32  		*bytes = byt
    33  		return nil
    34  	}
    35  
    36  	if v := reflect.ValueOf(ptr); v.Kind() == reflect.Ptr {
    37  		switch p := v.Elem(); p.Kind() {
    38  		case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    39  			var i int64
    40  			i, err = strconv.ParseInt(string(byt), 10, 64)
    41  			if err != nil {
    42  				return err
    43  			} else {
    44  				p.SetInt(i)
    45  			}
    46  			return nil
    47  
    48  		case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
    49  			var i uint64
    50  			i, err = strconv.ParseUint(string(byt), 10, 64)
    51  			if err != nil {
    52  				return err
    53  			} else {
    54  				p.SetUint(i)
    55  			}
    56  			return nil
    57  		}
    58  	}
    59  
    60  	b := bytes.NewBuffer(byt)
    61  	decoder := gob.NewDecoder(b)
    62  	if err = decoder.Decode(ptr); err != nil {
    63  		return err
    64  	}
    65  	return nil
    66  }
    67  

View as plain text