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