forked from ebhomengo/niki
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{}
|
||
|
}
|