package network import ( "net" ) // NormalizeAddresses returns a new slice with all the passed peer addresses // normalized with the given default port, and all duplicates removed. func NormalizeAddresses(addrs []string, defaultPort string) []string { for i, addr := range addrs { addrs[i] = NormalizeAddress(addr, defaultPort) } return removeDuplicateAddresses(addrs) } // NormalizeAddress returns addr with the passed default port appended if // there is not already a port specified. func NormalizeAddress(addr, defaultPort string) string { _, _, err := net.SplitHostPort(addr) if err != nil { return net.JoinHostPort(addr, defaultPort) } return addr } // removeDuplicateAddresses returns a new slice with all duplicate entries in // addrs removed. func removeDuplicateAddresses(addrs []string) []string { result := make([]string, 0, len(addrs)) seen := map[string]struct{}{} for _, val := range addrs { if _, ok := seen[val]; !ok { result = append(result, val) seen[val] = struct{}{} } } return result }