util.gno
1.18 Kb ยท 66 lines
1package disperse
2
3import (
4 "strconv"
5 "strings"
6 "unicode"
7)
8
9func parseAddresses(addresses string) ([]address, error) {
10 var ret []address
11
12 for _, str := range strings.Split(addresses, ",") {
13 addr := address(str)
14 if !addr.IsValid() {
15 return nil, ErrInvalidAddress
16 }
17
18 ret = append(ret, addr)
19 }
20
21 return ret, nil
22}
23
24func splitString(input string) (string, string) {
25 var pos int
26 for i, char := range input {
27 if !unicode.IsDigit(char) {
28 pos = i
29 break
30 }
31 }
32 return input[:pos], input[pos:]
33}
34
35func parseTokens(tokens string) ([]int64, []string, error) {
36 var amounts []int64
37 var symbols []string
38
39 for _, token := range strings.Split(tokens, ",") {
40 amountStr, symbol := splitString(token)
41 amount, _ := strconv.Atoi(amountStr)
42 if amount < 0 {
43 return nil, nil, ErrNegativeCoinAmount
44 }
45
46 amounts = append(amounts, int64(amount))
47 symbols = append(symbols, symbol)
48 }
49
50 return amounts, symbols, nil
51}
52
53func parseAmounts(amounts string) ([]int64, error) {
54 var ret []int64
55
56 for _, amt := range strings.Split(amounts, ",") {
57 amount, _ := strconv.Atoi(amt)
58 if amount < 0 {
59 return nil, ErrNegativeCoinAmount
60 }
61
62 ret = append(ret, int64(amount))
63 }
64
65 return ret, nil
66}