43 lines
791 B
Go
43 lines
791 B
Go
package input
|
|
|
|
import (
|
|
"net"
|
|
)
|
|
|
|
// Addr represents a [net.Addr].
|
|
type Addr struct {
|
|
Network string `json:"network"` // Type of address.
|
|
IP string `json:"ip"` // IP address.
|
|
Port int `json:"port,omitempty"` // Port (if any).
|
|
}
|
|
|
|
func NewAddr(addr net.Addr) *Addr {
|
|
if addr == nil {
|
|
return nil
|
|
}
|
|
switch addr := addr.(type) {
|
|
case *net.IPAddr:
|
|
return &Addr{
|
|
Network: addr.Network(),
|
|
IP: addr.IP.String(),
|
|
}
|
|
case *net.TCPAddr:
|
|
return &Addr{
|
|
Network: addr.Network(),
|
|
IP: addr.IP.String(),
|
|
Port: addr.Port,
|
|
}
|
|
case *net.UDPAddr:
|
|
return &Addr{
|
|
Network: addr.Network(),
|
|
IP: addr.IP.String(),
|
|
Port: addr.Port,
|
|
}
|
|
default:
|
|
return &Addr{
|
|
Network: addr.Network(),
|
|
IP: addr.String(),
|
|
}
|
|
}
|
|
}
|