1
0
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:
v2ray
2016-01-15 15:23:12 +01:00
parent a403859105
commit 2d233295e6
14 changed files with 120 additions and 143 deletions

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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))
}

View File

@@ -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)))
}

View 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)
}

View 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))
}