package config import ( "io/fs" "net/url" "strconv" ) const ( NetworkTCP = "tcp" NetworkUnix = "unix" ) type ServerAddress struct { Address string Scheme string UnixSocketPermission fs.FileMode } func (s ServerAddress) Enabled() bool { return s.Address != "" } func (s ServerAddress) IsUnixSocket() bool { return s.Scheme == NetworkUnix } func (s ServerAddress) Network() string { if s.Scheme == NetworkUnix { return NetworkUnix } else { return NetworkTCP } } func UnixSocketAddress(path string, perm string) (ServerAddress, error) { permission, err := strconv.ParseInt(perm, 8, 32) if err != nil { return ServerAddress{}, err } return ServerAddress{Address: path, Scheme: NetworkUnix, UnixSocketPermission: fs.FileMode(permission)}, nil } func HTTPAddress(urlAddress string) (ServerAddress, error) { parsedUrl, err := url.Parse(urlAddress) if err != nil { return ServerAddress{}, err } return ServerAddress{parsedUrl.Host, parsedUrl.Scheme, 0}, nil }