feat(format-servers): add json format option
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
@@ -90,8 +91,11 @@ func (s *Server) ToMarkdown(headers ...string) (markdown string) {
|
||||
return "| " + strings.Join(fields, " | ") + " |"
|
||||
}
|
||||
|
||||
func (s *Servers) ToMarkdown(vpnProvider string) (markdown string) {
|
||||
headers := getMarkdownHeaders(vpnProvider)
|
||||
func (s *Servers) toMarkdown(vpnProvider string) (formatted string, err error) {
|
||||
headers, err := getMarkdownHeaders(vpnProvider)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("getting markdown headers: %w", err)
|
||||
}
|
||||
|
||||
legend := markdownTableHeading(headers...)
|
||||
|
||||
@@ -100,63 +104,67 @@ func (s *Servers) ToMarkdown(vpnProvider string) (markdown string) {
|
||||
entries[i] = server.ToMarkdown(headers...)
|
||||
}
|
||||
|
||||
markdown = legend + "\n" +
|
||||
formatted = legend + "\n" +
|
||||
strings.Join(entries, "\n") + "\n"
|
||||
return markdown
|
||||
return formatted, nil
|
||||
}
|
||||
|
||||
func getMarkdownHeaders(vpnProvider string) (headers []string) {
|
||||
var (
|
||||
ErrMarkdownHeadersNotDefined = errors.New("markdown headers not defined")
|
||||
)
|
||||
|
||||
func getMarkdownHeaders(vpnProvider string) (headers []string, err error) {
|
||||
switch vpnProvider {
|
||||
case providers.Airvpn:
|
||||
return []string{regionHeader, countryHeader, cityHeader, vpnHeader,
|
||||
udpHeader, tcpHeader, hostnameHeader, nameHeader}
|
||||
udpHeader, tcpHeader, hostnameHeader, nameHeader}, nil
|
||||
case providers.Cyberghost:
|
||||
return []string{countryHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Expressvpn:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Fastestvpn:
|
||||
return []string{countryHeader, hostnameHeader, vpnHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, hostnameHeader, vpnHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.HideMyAss:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Ipvanish:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Ivpn:
|
||||
return []string{countryHeader, cityHeader, ispHeader, hostnameHeader, vpnHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, cityHeader, ispHeader, hostnameHeader, vpnHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Mullvad:
|
||||
return []string{countryHeader, cityHeader, ispHeader, ownedHeader, hostnameHeader, vpnHeader}
|
||||
return []string{countryHeader, cityHeader, ispHeader, ownedHeader, hostnameHeader, vpnHeader}, nil
|
||||
case providers.Nordvpn:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, vpnHeader, categoriesHeader}
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, vpnHeader, categoriesHeader}, nil
|
||||
case providers.Perfectprivacy:
|
||||
return []string{cityHeader, tcpHeader, udpHeader}
|
||||
return []string{cityHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Privado:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader}
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader}, nil
|
||||
case providers.PrivateInternetAccess:
|
||||
return []string{regionHeader, hostnameHeader, nameHeader, tcpHeader, udpHeader, portForwardHeader}
|
||||
return []string{regionHeader, hostnameHeader, nameHeader, tcpHeader, udpHeader, portForwardHeader}, nil
|
||||
case providers.Privatevpn:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader}
|
||||
return []string{countryHeader, cityHeader, hostnameHeader}, nil
|
||||
case providers.Protonvpn:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, vpnHeader,
|
||||
freeHeader, portForwardHeader, secureHeader, torHeader}
|
||||
freeHeader, portForwardHeader, secureHeader, torHeader}, nil
|
||||
case providers.Purevpn:
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, regionHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.SlickVPN:
|
||||
return []string{regionHeader, countryHeader, cityHeader, hostnameHeader}
|
||||
return []string{regionHeader, countryHeader, cityHeader, hostnameHeader}, nil
|
||||
case providers.Surfshark:
|
||||
return []string{regionHeader, countryHeader, cityHeader, hostnameHeader,
|
||||
vpnHeader, multiHopHeader, tcpHeader, udpHeader}
|
||||
vpnHeader, multiHopHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Torguard:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.VPNSecure:
|
||||
return []string{regionHeader, cityHeader, hostnameHeader, premiumHeader}
|
||||
return []string{regionHeader, cityHeader, hostnameHeader, premiumHeader}, nil
|
||||
case providers.VPNUnlimited:
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, freeHeader, streamHeader, tcpHeader, udpHeader}
|
||||
return []string{countryHeader, cityHeader, hostnameHeader, freeHeader, streamHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Vyprvpn:
|
||||
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{regionHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Wevpn:
|
||||
return []string{cityHeader, hostnameHeader, tcpHeader, udpHeader}
|
||||
return []string{cityHeader, hostnameHeader, tcpHeader, udpHeader}, nil
|
||||
case providers.Windscribe:
|
||||
return []string{regionHeader, cityHeader, hostnameHeader, vpnHeader}
|
||||
return []string{regionHeader, cityHeader, hostnameHeader, vpnHeader}, nil
|
||||
default:
|
||||
return nil
|
||||
return nil, fmt.Errorf("%w: for %s", ErrMarkdownHeadersNotDefined, vpnProvider)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user