mirror of
https://github.com/v2fly/v2ray-core.git
synced 2026-05-18 02:19:07 -04:00
simplify stringlist
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
package net
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"github.com/v2ray/v2ray-core/common/serial"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -9,14 +9,14 @@ const (
|
||||
UDPNetwork = Network("udp")
|
||||
)
|
||||
|
||||
type Network string
|
||||
type Network serial.StringLiteral
|
||||
|
||||
type NetworkList []Network
|
||||
|
||||
func NewNetworkList(networks []string) NetworkList {
|
||||
list := NetworkList(make([]Network, len(networks)))
|
||||
func NewNetworkList(networks serial.StringLiteralList) NetworkList {
|
||||
list := NetworkList(make([]Network, networks.Len()))
|
||||
for idx, network := range networks {
|
||||
list[idx] = Network(strings.ToLower(strings.TrimSpace(network)))
|
||||
list[idx] = Network(network.TrimSpace().ToLower())
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
@@ -3,12 +3,14 @@
|
||||
package net
|
||||
|
||||
import (
|
||||
serialjson "github.com/v2ray/v2ray-core/common/serial/json"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/v2ray/v2ray-core/common/serial"
|
||||
)
|
||||
|
||||
func (this *NetworkList) UnmarshalJSON(data []byte) error {
|
||||
strlist, err := serialjson.UnmarshalStringList(data)
|
||||
if err != nil {
|
||||
var strlist serial.StringLiteralList
|
||||
if err := json.Unmarshal(data, &strlist); err != nil {
|
||||
return err
|
||||
}
|
||||
*this = NewNetworkList(strlist)
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package json
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func UnmarshalStringList(data []byte) ([]string, error) {
|
||||
var strarray []string
|
||||
if err := json.Unmarshal(data, &strarray); err == nil {
|
||||
return strarray, nil
|
||||
}
|
||||
|
||||
var rawstr string
|
||||
if err := json.Unmarshal(data, &rawstr); err == nil {
|
||||
strlist := strings.Split(rawstr, ",")
|
||||
return strlist, nil
|
||||
}
|
||||
return nil, errors.New("Unknown format of a string list: " + string(data))
|
||||
}
|
||||
@@ -1,5 +1,9 @@
|
||||
package serial
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// An interface for any objects that has string presentation.
|
||||
type String interface {
|
||||
String() string
|
||||
@@ -7,6 +11,22 @@ type String interface {
|
||||
|
||||
type StringLiteral string
|
||||
|
||||
func NewStringLiteral(str String) StringLiteral {
|
||||
return StringLiteral(str.String())
|
||||
}
|
||||
|
||||
func (this StringLiteral) String() string {
|
||||
return string(this)
|
||||
}
|
||||
|
||||
func (this StringLiteral) ToLower() StringLiteral {
|
||||
return StringLiteral(strings.ToLower(string(this)))
|
||||
}
|
||||
|
||||
func (this StringLiteral) ToUpper() StringLiteral {
|
||||
return StringLiteral(strings.ToUpper(string(this)))
|
||||
}
|
||||
|
||||
func (this StringLiteral) TrimSpace() StringLiteral {
|
||||
return StringLiteral(strings.TrimSpace(string(this)))
|
||||
}
|
||||
|
||||
15
common/serial/string_list.go
Normal file
15
common/serial/string_list.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package serial
|
||||
|
||||
type StringLiteralList []StringLiteral
|
||||
|
||||
func NewStringLiteralList(raw []string) *StringLiteralList {
|
||||
list := StringLiteralList(make([]StringLiteral, len(raw)))
|
||||
for idx, str := range raw {
|
||||
list[idx] = StringLiteral(str)
|
||||
}
|
||||
return &list
|
||||
}
|
||||
|
||||
func (this *StringLiteralList) Len() int {
|
||||
return len(*this)
|
||||
}
|
||||
25
common/serial/string_list_json.go
Normal file
25
common/serial/string_list_json.go
Normal file
@@ -0,0 +1,25 @@
|
||||
// +build json
|
||||
|
||||
package serial
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (this *StringLiteralList) UnmarshalJSON(data []byte) error {
|
||||
var strarray []string
|
||||
if err := json.Unmarshal(data, &strarray); err == nil {
|
||||
*this = *NewStringLiteralList(strarray)
|
||||
return nil
|
||||
}
|
||||
|
||||
var rawstr string
|
||||
if err := json.Unmarshal(data, &rawstr); err == nil {
|
||||
strlist := strings.Split(rawstr, ",")
|
||||
*this = *NewStringLiteralList(strlist)
|
||||
return nil
|
||||
}
|
||||
return errors.New("Unknown format of a string list: " + string(data))
|
||||
}
|
||||
Reference in New Issue
Block a user