normalize.go raw

   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