1 package normalize
2 3 import (
4 "net"
5 )
6 7 // address returns addr with the passed default port appended if there is not
8 // already a port specified.
9 func address(addr, defaultPort string) string {
10 var e error
11 if _, _, e = net.SplitHostPort(addr); E.Chk(e) {
12 return net.JoinHostPort(addr, defaultPort)
13 }
14 return addr
15 }
16 17 // Addresses returns a new slice with all the passed peer addresses normalized
18 // with the given default port, and all duplicates removed.
19 func Addresses(addrs []string, defaultPort string) []string {
20 for i := range addrs {
21 addrs[i] = address(addrs[i], defaultPort)
22 }
23 return RemoveDuplicateAddresses(addrs)
24 }
25 26 // RemoveDuplicateAddresses returns a new slice with all duplicate entries in
27 // addrs removed.
28 func RemoveDuplicateAddresses(addrs []string) (result []string) {
29 result = make([]string, 0, len(addrs))
30 seen := map[string]struct{}{}
31 for _, val := range addrs {
32 if _, ok := seen[val]; !ok {
33 result = append(result, val)
34 seen[val] = struct{}{}
35 }
36 }
37 return result
38 }
39 40 // StringSliceAddresses normalizes a slice of addresses
41 func StringSliceAddresses(a []string, port string) {
42 variable := a
43 a = Addresses(variable, port)
44 }
45