mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			160 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package objx
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| )
 | |
| 
 | |
| // Value provides methods for extracting interface{} data in various
 | |
| // types.
 | |
| type Value struct {
 | |
| 	// data contains the raw data being managed by this Value
 | |
| 	data interface{}
 | |
| }
 | |
| 
 | |
| // Data returns the raw data contained by this Value
 | |
| func (v *Value) Data() interface{} {
 | |
| 	return v.data
 | |
| }
 | |
| 
 | |
| // String returns the value always as a string
 | |
| func (v *Value) String() string {
 | |
| 	switch {
 | |
| 	case v.IsNil():
 | |
| 		return ""
 | |
| 	case v.IsStr():
 | |
| 		return v.Str()
 | |
| 	case v.IsBool():
 | |
| 		return strconv.FormatBool(v.Bool())
 | |
| 	case v.IsFloat32():
 | |
| 		return strconv.FormatFloat(float64(v.Float32()), 'f', -1, 32)
 | |
| 	case v.IsFloat64():
 | |
| 		return strconv.FormatFloat(v.Float64(), 'f', -1, 64)
 | |
| 	case v.IsInt():
 | |
| 		return strconv.FormatInt(int64(v.Int()), 10)
 | |
| 	case v.IsInt8():
 | |
| 		return strconv.FormatInt(int64(v.Int8()), 10)
 | |
| 	case v.IsInt16():
 | |
| 		return strconv.FormatInt(int64(v.Int16()), 10)
 | |
| 	case v.IsInt32():
 | |
| 		return strconv.FormatInt(int64(v.Int32()), 10)
 | |
| 	case v.IsInt64():
 | |
| 		return strconv.FormatInt(v.Int64(), 10)
 | |
| 	case v.IsUint():
 | |
| 		return strconv.FormatUint(uint64(v.Uint()), 10)
 | |
| 	case v.IsUint8():
 | |
| 		return strconv.FormatUint(uint64(v.Uint8()), 10)
 | |
| 	case v.IsUint16():
 | |
| 		return strconv.FormatUint(uint64(v.Uint16()), 10)
 | |
| 	case v.IsUint32():
 | |
| 		return strconv.FormatUint(uint64(v.Uint32()), 10)
 | |
| 	case v.IsUint64():
 | |
| 		return strconv.FormatUint(v.Uint64(), 10)
 | |
| 	}
 | |
| 	return fmt.Sprintf("%#v", v.Data())
 | |
| }
 | |
| 
 | |
| // StringSlice returns the value always as a []string
 | |
| func (v *Value) StringSlice(optionalDefault ...[]string) []string {
 | |
| 	switch {
 | |
| 	case v.IsStrSlice():
 | |
| 		return v.MustStrSlice()
 | |
| 	case v.IsBoolSlice():
 | |
| 		slice := v.MustBoolSlice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatBool(iv)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsFloat32Slice():
 | |
| 		slice := v.MustFloat32Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatFloat(float64(iv), 'f', -1, 32)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsFloat64Slice():
 | |
| 		slice := v.MustFloat64Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatFloat(iv, 'f', -1, 64)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsIntSlice():
 | |
| 		slice := v.MustIntSlice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatInt(int64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsInt8Slice():
 | |
| 		slice := v.MustInt8Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatInt(int64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsInt16Slice():
 | |
| 		slice := v.MustInt16Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatInt(int64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsInt32Slice():
 | |
| 		slice := v.MustInt32Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatInt(int64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsInt64Slice():
 | |
| 		slice := v.MustInt64Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatInt(iv, 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsUintSlice():
 | |
| 		slice := v.MustUintSlice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatUint(uint64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsUint8Slice():
 | |
| 		slice := v.MustUint8Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatUint(uint64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsUint16Slice():
 | |
| 		slice := v.MustUint16Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatUint(uint64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsUint32Slice():
 | |
| 		slice := v.MustUint32Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatUint(uint64(iv), 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	case v.IsUint64Slice():
 | |
| 		slice := v.MustUint64Slice()
 | |
| 		vals := make([]string, len(slice))
 | |
| 		for i, iv := range slice {
 | |
| 			vals[i] = strconv.FormatUint(iv, 10)
 | |
| 		}
 | |
| 		return vals
 | |
| 	}
 | |
| 	if len(optionalDefault) == 1 {
 | |
| 		return optionalDefault[0]
 | |
| 	}
 | |
| 
 | |
| 	return []string{}
 | |
| }
 |