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(), } } }