utils.gno
0.83 Kb · 44 lines
1package user
2
3func copyStringMap(source map[string]string) map[string]string {
4 result := map[string]string{}
5 for k, v := range source {
6 result[k] = v
7 }
8 return result
9}
10
11func parseCSVMap(keys, values string, panicMessagePrefix string) map[string]string {
12 pending := map[string]string{}
13 keyStart, valStart := 0, 0
14 keyIdx, valIdx := 0, 0
15 for {
16 for keyIdx < len(keys) && keys[keyIdx] != ',' {
17 keyIdx++
18 }
19 for valIdx < len(values) && values[valIdx] != ',' {
20 valIdx++
21 }
22
23 key := keys[keyStart:keyIdx]
24 val := values[valStart:valIdx]
25 pending[key] = val
26
27 keyEnd := keyIdx >= len(keys)
28 valEnd := valIdx >= len(values)
29
30 if keyEnd != valEnd {
31 panic(panicMessagePrefix + " keys and values count mismatch")
32 }
33 if keyEnd {
34 break
35 }
36
37 keyIdx++
38 valIdx++
39 keyStart = keyIdx
40 valStart = valIdx
41 }
42
43 return pending
44}