Files
gluetun/internal/portforward/service/helpers.go
T

73 lines
1.8 KiB
Go

package service
import (
"fmt"
"maps"
"slices"
"sort"
"strconv"
"strings"
)
func portsToString(ports []uint16) (s string) {
switch len(ports) {
case 0:
return "no port forwarded"
case 1:
return "port forwarded is " + fmt.Sprint(int(ports[0]))
default:
portStrings := make([]string, len(ports))
for i, port := range ports {
portStrings[i] = fmt.Sprint(int(port))
}
return "ports forwarded are " + strings.Join(portStrings[:len(portStrings)-1], ", ") +
" and " + portStrings[len(portStrings)-1]
}
}
func portPairsToString(internalToExternalPort map[uint16]uint16) (s string) {
switch len(internalToExternalPort) {
case 0:
return "no port forwarded"
case 1:
internal := slices.Collect(maps.Keys(internalToExternalPort))[0]
return "port forwarded is " + portPairToString(internal, internalToExternalPort[internal])
default:
portStrings := make([]string, 0, len(internalToExternalPort))
for internal, external := range internalToExternalPort {
portStrings = append(portStrings, portPairToString(internal, external))
}
sort.StringSlice(portStrings).Sort()
return "ports forwarded are " + strings.Join(portStrings[:len(portStrings)-1], ", ") +
" and " + portStrings[len(portStrings)-1]
}
}
func portPairToString(internal, external uint16) string {
if internal == external {
return strconv.FormatUint(uint64(external), 10)
}
return fmt.Sprintf("%d (internal port %d)", external, internal)
}
type loggerWithPrefix struct {
prefix string
logger Logger
}
func (l *loggerWithPrefix) Debug(msg string) {
l.logger.Debug(l.prefix + msg)
}
func (l *loggerWithPrefix) Info(msg string) {
l.logger.Info(l.prefix + msg)
}
func (l *loggerWithPrefix) Warn(msg string) {
l.logger.Warn(l.prefix + msg)
}
func (l *loggerWithPrefix) Error(msg string) {
l.logger.Error(l.prefix + msg)
}