github.com/sohaha/zlsgo@v1.7.13-0.20240501141223-10dd1a906f76/ztype/type.go (about) 1 package ztype 2 3 import ( 4 "time" 5 ) 6 7 type Type struct { 8 v interface{} 9 } 10 11 func New(v interface{}) Type { 12 switch val := v.(type) { 13 case Type: 14 return val 15 default: 16 return Type{v: v} 17 } 18 } 19 20 func (t Type) Value() interface{} { 21 return t.v 22 } 23 24 func (t Type) Get(path string) Type { 25 v, ok := parsePath(path, t.v) 26 if !ok { 27 return Type{} 28 } 29 return New(v) 30 } 31 32 func (t Type) String(def ...string) string { 33 if t.v == nil && len(def) > 0 { 34 return def[0] 35 } 36 return ToString(t.v) 37 } 38 39 func (t Type) Bytes(def ...[]byte) []byte { 40 if t.v == nil && len(def) > 0 { 41 return def[0] 42 } 43 return ToBytes(t.v) 44 } 45 46 func (t Type) Bool(def ...bool) bool { 47 if t.v == nil && len(def) > 0 { 48 return def[0] 49 } 50 return ToBool(t.v) 51 } 52 53 func (t Type) Int(def ...int) int { 54 if t.v == nil && len(def) > 0 { 55 return def[0] 56 } 57 return ToInt(t.v) 58 } 59 60 func (t Type) Int8(def ...int8) int8 { 61 if t.v == nil && len(def) > 0 { 62 return def[0] 63 } 64 return ToInt8(t.v) 65 } 66 67 func (t Type) Int16(def ...int16) int16 { 68 if t.v == nil && len(def) > 0 { 69 return def[0] 70 } 71 return ToInt16(t.v) 72 } 73 74 func (t Type) Int32(def ...int32) int32 { 75 if t.v == nil && len(def) > 0 { 76 return def[0] 77 } 78 return ToInt32(t.v) 79 } 80 81 func (t Type) Int64(def ...int64) int64 { 82 if t.v == nil && len(def) > 0 { 83 return def[0] 84 } 85 return ToInt64(t.v) 86 } 87 88 func (t Type) Uint(def ...uint) uint { 89 if t.v == nil && len(def) > 0 { 90 return def[0] 91 } 92 return ToUint(t.v) 93 } 94 95 func (t Type) Uint8(def ...uint8) uint8 { 96 if t.v == nil && len(def) > 0 { 97 return def[0] 98 } 99 return ToUint8(t.v) 100 } 101 102 func (t Type) Uint16(def ...uint16) uint16 { 103 if t.v == nil && len(def) > 0 { 104 return def[0] 105 } 106 return ToUint16(t.v) 107 } 108 109 func (t Type) Uint32(def ...uint32) uint32 { 110 if t.v == nil && len(def) > 0 { 111 return def[0] 112 } 113 return ToUint32(t.v) 114 } 115 116 func (t Type) Uint64(def ...uint64) uint64 { 117 if t.v == nil && len(def) > 0 { 118 return def[0] 119 } 120 return ToUint64(t.v) 121 } 122 123 func (t Type) Float32(def ...float32) float32 { 124 if t.v == nil && len(def) > 0 { 125 return def[0] 126 } 127 return ToFloat32(t.v) 128 } 129 130 func (t Type) Float64(def ...float64) float64 { 131 if t.v == nil && len(def) > 0 { 132 return def[0] 133 } 134 return ToFloat64(t.v) 135 } 136 137 func (t Type) Maps() Maps { 138 return t.Slice().Maps() 139 } 140 141 func (t Type) Slice(noConv ...bool) SliceType { 142 if t.v == nil { 143 return SliceType{} 144 } 145 return ToSlice(t.v, noConv...) 146 } 147 148 func (t Type) SliceValue(noConv ...bool) []interface{} { 149 return t.Slice(noConv...).Value() 150 } 151 152 func (t Type) SliceString(noConv ...bool) []string { 153 return t.Slice(noConv...).String() 154 } 155 156 func (t Type) SliceInt(noConv ...bool) []int { 157 return t.Slice(noConv...).Int() 158 } 159 160 func (t Type) Exists() bool { 161 return t.v != nil 162 } 163 164 func (t Type) Time(format ...string) (time.Time, error) { 165 return ToTime(t.v, format...) 166 } 167 168 func (t Type) Map() Map { 169 return ToMap(t.v) 170 }