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}