ソースを参照

Config: Correctly marshal PortList and NameServerConfig to JSON (#4386)

yiguous 1 年間 前
コミット
94c7970fd6
2 ファイル変更25 行追加7 行削除
  1. 18 0
      infra/conf/common.go
  2. 7 7
      infra/conf/dns.go

+ 18 - 0
infra/conf/common.go

@@ -203,6 +203,24 @@ func (list *PortList) Build() *net.PortList {
 	return portList
 }
 
+func (v PortList) MarshalJSON() ([]byte, error) {
+	return json.Marshal(v.String())
+}
+
+func (v PortList) String() string {
+	ports := []string{}
+	for _, port := range v.Range {
+		if port.From == port.To {
+			p := strconv.Itoa(int(port.From))
+			ports = append(ports, p)
+		} else {
+			p := fmt.Sprintf("%d-%d", port.From, port.To)
+			ports = append(ports, p)
+		}
+	}
+	return strings.Join(ports, ",")
+}
+
 // UnmarshalJSON implements encoding/json.Unmarshaler.UnmarshalJSON
 func (list *PortList) UnmarshalJSON(data []byte) error {
 	var listStr string

+ 7 - 7
infra/conf/dns.go

@@ -12,13 +12,13 @@ import (
 )
 
 type NameServerConfig struct {
-	Address       *Address
-	ClientIP      *Address
-	Port          uint16
-	SkipFallback  bool
-	Domains       []string
-	ExpectIPs     StringList
-	QueryStrategy string
+	Address       *Address   `json:"address"`
+	ClientIP      *Address   `json:"clientIp"`
+	Port          uint16     `json:"port"`
+	SkipFallback  bool       `json:"skipFallback"`
+	Domains       []string   `json:"domains"`
+	ExpectIPs     StringList `json:"expectIps"`
+	QueryStrategy string     `json:"queryStrategy"`
 }
 
 func (c *NameServerConfig) UnmarshalJSON(data []byte) error {