github.com/wuhuizuo/gomplate@v3.5.0+incompatible/funcs/conv.go (about) 1 package funcs 2 3 import ( 4 "net/url" 5 "sync" 6 "text/template" 7 8 "github.com/hairyhenderson/gomplate/coll" 9 "github.com/hairyhenderson/gomplate/conv" 10 ) 11 12 var ( 13 convNS *ConvFuncs 14 convNSInit sync.Once 15 ) 16 17 // ConvNS - 18 func ConvNS() *ConvFuncs { 19 convNSInit.Do(func() { convNS = &ConvFuncs{} }) 20 return convNS 21 } 22 23 // AddConvFuncs - 24 func AddConvFuncs(f map[string]interface{}) { 25 f["conv"] = ConvNS 26 27 f["urlParse"] = ConvNS().URL 28 f["bool"] = ConvNS().Bool 29 f["join"] = ConvNS().Join 30 f["default"] = ConvNS().Default 31 } 32 33 // ConvFuncs - 34 type ConvFuncs struct{} 35 36 // Bool - 37 func (f *ConvFuncs) Bool(s interface{}) bool { 38 return conv.Bool(conv.ToString(s)) 39 } 40 41 // ToBool - 42 func (f *ConvFuncs) ToBool(in interface{}) bool { 43 return conv.ToBool(in) 44 } 45 46 // ToBools - 47 func (f *ConvFuncs) ToBools(in ...interface{}) []bool { 48 return conv.ToBools(in...) 49 } 50 51 // Slice - 52 func (f *ConvFuncs) Slice(args ...interface{}) []interface{} { 53 return coll.Slice(args...) 54 } 55 56 // Join - 57 func (f *ConvFuncs) Join(in interface{}, sep string) (string, error) { 58 return conv.Join(in, sep) 59 } 60 61 // Has - 62 func (f *ConvFuncs) Has(in interface{}, key string) bool { 63 return coll.Has(in, key) 64 } 65 66 // ParseInt - 67 func (f *ConvFuncs) ParseInt(s interface{}, base, bitSize int) int64 { 68 return conv.MustParseInt(conv.ToString(s), base, bitSize) 69 } 70 71 // ParseFloat - 72 func (f *ConvFuncs) ParseFloat(s interface{}, bitSize int) float64 { 73 return conv.MustParseFloat(conv.ToString(s), bitSize) 74 } 75 76 // ParseUint - 77 func (f *ConvFuncs) ParseUint(s interface{}, base, bitSize int) uint64 { 78 return conv.MustParseUint(conv.ToString(s), base, bitSize) 79 } 80 81 // Atoi - 82 func (f *ConvFuncs) Atoi(s interface{}) int { 83 return conv.MustAtoi(conv.ToString(s)) 84 } 85 86 // URL - 87 func (f *ConvFuncs) URL(s interface{}) (*url.URL, error) { 88 return url.Parse(conv.ToString(s)) 89 } 90 91 // ToInt64 - 92 func (f *ConvFuncs) ToInt64(in interface{}) int64 { 93 return conv.ToInt64(in) 94 } 95 96 // ToInt - 97 func (f *ConvFuncs) ToInt(in interface{}) int { 98 return conv.ToInt(in) 99 } 100 101 // ToInt64s - 102 func (f *ConvFuncs) ToInt64s(in ...interface{}) []int64 { 103 return conv.ToInt64s(in...) 104 } 105 106 // ToInts - 107 func (f *ConvFuncs) ToInts(in ...interface{}) []int { 108 return conv.ToInts(in...) 109 } 110 111 // ToFloat64 - 112 func (f *ConvFuncs) ToFloat64(in interface{}) float64 { 113 return conv.ToFloat64(in) 114 } 115 116 // ToFloat64s - 117 func (f *ConvFuncs) ToFloat64s(in ...interface{}) []float64 { 118 return conv.ToFloat64s(in...) 119 } 120 121 // ToString - 122 func (f *ConvFuncs) ToString(in interface{}) string { 123 return conv.ToString(in) 124 } 125 126 // ToStrings - 127 func (f *ConvFuncs) ToStrings(in ...interface{}) []string { 128 return conv.ToStrings(in...) 129 } 130 131 // Default - 132 func (f *ConvFuncs) Default(def, in interface{}) interface{} { 133 if truth, ok := template.IsTrue(in); truth && ok { 134 return in 135 } 136 return def 137 } 138 139 // Dict - 140 func (f *ConvFuncs) Dict(in ...interface{}) (map[string]interface{}, error) { 141 return coll.Dict(in...) 142 }