Initial QSfera import
This commit is contained in:
+64
@@ -0,0 +1,64 @@
|
||||
package kafka
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// TCP constructs an address with the network set to "tcp".
|
||||
func TCP(address ...string) net.Addr { return makeNetAddr("tcp", address) }
|
||||
|
||||
func makeNetAddr(network string, addresses []string) net.Addr {
|
||||
switch len(addresses) {
|
||||
case 0:
|
||||
return nil // maybe panic instead?
|
||||
case 1:
|
||||
return makeAddr(network, addresses[0])
|
||||
default:
|
||||
return makeMultiAddr(network, addresses)
|
||||
}
|
||||
}
|
||||
|
||||
func makeAddr(network, address string) net.Addr {
|
||||
return &networkAddress{
|
||||
network: network,
|
||||
address: canonicalAddress(address),
|
||||
}
|
||||
}
|
||||
|
||||
func makeMultiAddr(network string, addresses []string) net.Addr {
|
||||
multi := make(multiAddr, len(addresses))
|
||||
for i, address := range addresses {
|
||||
multi[i] = makeAddr(network, address)
|
||||
}
|
||||
return multi
|
||||
}
|
||||
|
||||
type networkAddress struct {
|
||||
network string
|
||||
address string
|
||||
}
|
||||
|
||||
func (a *networkAddress) Network() string { return a.network }
|
||||
|
||||
func (a *networkAddress) String() string { return a.address }
|
||||
|
||||
type multiAddr []net.Addr
|
||||
|
||||
func (m multiAddr) Network() string { return m.join(net.Addr.Network) }
|
||||
|
||||
func (m multiAddr) String() string { return m.join(net.Addr.String) }
|
||||
|
||||
func (m multiAddr) join(f func(net.Addr) string) string {
|
||||
switch len(m) {
|
||||
case 0:
|
||||
return ""
|
||||
case 1:
|
||||
return f(m[0])
|
||||
}
|
||||
s := make([]string, len(m))
|
||||
for i, a := range m {
|
||||
s[i] = f(a)
|
||||
}
|
||||
return strings.Join(s, ",")
|
||||
}
|
||||
Reference in New Issue
Block a user