github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/yaml/helper.go (about)

     1  package yaml
     2  
     3  import (
     4  	"reflect"
     5  	"strconv"
     6  
     7  	"golang.org/x/xerrors"
     8  )
     9  
    10  // CastUint64 casts an uint64 to target typ.
    11  func CastUint64(v uint64, typ reflect.Type) (reflect.Value, error) {
    12  	switch typ.Kind() {
    13  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    14  		vv := reflect.New(typ)
    15  		vv.Elem().SetInt(int64(v))
    16  		return vv.Elem(), nil
    17  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
    18  		vv := reflect.New(typ)
    19  		vv.Elem().SetUint(v)
    20  		return vv.Elem(), nil
    21  	case reflect.String:
    22  		vv := reflect.New(typ)
    23  		vv.Elem().SetString(strconv.FormatUint(v, 10))
    24  		return vv.Elem(), nil
    25  	}
    26  	return reflect.Value{}, xerrors.New("failed to cast")
    27  }