podman
189 строк · 3.6 Кб
1package sprig2
3import (4"encoding/base32"5"encoding/base64"6"fmt"7"reflect"8"strconv"9"strings"10)
11
12func base64encode(v string) string {13return base64.StdEncoding.EncodeToString([]byte(v))14}
15
16func base64decode(v string) string {17data, err := base64.StdEncoding.DecodeString(v)18if err != nil {19return err.Error()20}21return string(data)22}
23
24func base32encode(v string) string {25return base32.StdEncoding.EncodeToString([]byte(v))26}
27
28func base32decode(v string) string {29data, err := base32.StdEncoding.DecodeString(v)30if err != nil {31return err.Error()32}33return string(data)34}
35
36func quote(str ...interface{}) string {37out := make([]string, 0, len(str))38for _, s := range str {39if s != nil {40out = append(out, fmt.Sprintf("%q", strval(s)))41}42}43return strings.Join(out, " ")44}
45
46func squote(str ...interface{}) string {47out := make([]string, 0, len(str))48for _, s := range str {49if s != nil {50out = append(out, fmt.Sprintf("'%v'", s))51}52}53return strings.Join(out, " ")54}
55
56func cat(v ...interface{}) string {57v = removeNilElements(v)58r := strings.TrimSpace(strings.Repeat("%v ", len(v)))59return fmt.Sprintf(r, v...)60}
61
62func indent(spaces int, v string) string {63pad := strings.Repeat(" ", spaces)64return pad + strings.Replace(v, "\n", "\n"+pad, -1)65}
66
67func nindent(spaces int, v string) string {68return "\n" + indent(spaces, v)69}
70
71func replace(old, new, src string) string {72return strings.Replace(src, old, new, -1)73}
74
75func plural(one, many string, count int) string {76if count == 1 {77return one78}79return many80}
81
82func strslice(v interface{}) []string {83switch v := v.(type) {84case []string:85return v86case []interface{}:87b := make([]string, 0, len(v))88for _, s := range v {89if s != nil {90b = append(b, strval(s))91}92}93return b94default:95val := reflect.ValueOf(v)96switch val.Kind() {97case reflect.Array, reflect.Slice:98l := val.Len()99b := make([]string, 0, l)100for i := 0; i < l; i++ {101value := val.Index(i).Interface()102if value != nil {103b = append(b, strval(value))104}105}106return b107default:108if v == nil {109return []string{}110}111
112return []string{strval(v)}113}114}115}
116
117func removeNilElements(v []interface{}) []interface{} {118newSlice := make([]interface{}, 0, len(v))119for _, i := range v {120if i != nil {121newSlice = append(newSlice, i)122}123}124return newSlice125}
126
127func strval(v interface{}) string {128switch v := v.(type) {129case string:130return v131case []byte:132return string(v)133case error:134return v.Error()135case fmt.Stringer:136return v.String()137default:138return fmt.Sprintf("%v", v)139}140}
141
142func trunc(c int, s string) string {143if c < 0 && len(s)+c > 0 {144return s[len(s)+c:]145}146if c >= 0 && len(s) > c {147return s[:c]148}149return s150}
151
152func join(sep string, v interface{}) string {153return strings.Join(strslice(v), sep)154}
155
156func split(sep, orig string) map[string]string {157parts := strings.Split(orig, sep)158res := make(map[string]string, len(parts))159for i, v := range parts {160res["_"+strconv.Itoa(i)] = v161}162return res163}
164
165func splitn(sep string, n int, orig string) map[string]string {166parts := strings.SplitN(orig, sep, n)167res := make(map[string]string, len(parts))168for i, v := range parts {169res["_"+strconv.Itoa(i)] = v170}171return res172}
173
174// substring creates a substring of the given string.
175//
176// If start is < 0, this calls string[:end].
177//
178// If start is >= 0 and end < 0 or end bigger than s length, this calls string[start:]
179//
180// Otherwise, this calls string[start, end].
181func substring(start, end int, s string) string {182if start < 0 {183return s[:end]184}185if end < 0 || end > len(s) {186return s[start:]187}188return s[start:end]189}
190