diff --git a/option/types.go b/option/types.go index d97614da..f2df2ca2 100644 --- a/option/types.go +++ b/option/types.go @@ -2,7 +2,6 @@ package option import ( "net/netip" - "strings" "time" "github.com/sagernet/sing-box/common/json" @@ -50,10 +49,13 @@ func (a *ListenAddress) Build() netip.Addr { return (netip.Addr)(*a) } -type NetworkList string +type NetworkList []string -func (v *NetworkList) UnmarshalJSON(content []byte) (err error) { - var networkList []string +func (v *NetworkList) UnmarshalJSON(content []byte) error { + var ( + networkList []string + err error + ) if len(content) > 0 && content[0] != '[' { networkList = make([]string, 1) err = json.Unmarshal(content, &networkList[0]) @@ -61,25 +63,25 @@ func (v *NetworkList) UnmarshalJSON(content []byte) (err error) { err = json.Unmarshal(content, &networkList) } if err != nil { - return + return err } for _, networkName := range networkList { switch networkName { case N.NetworkTCP, N.NetworkUDP: break default: - return E.New("unknown network: " + networkName) + return E.Extend(N.ErrUnknownNetwork, networkName) } } - *v = NetworkList(strings.Join(networkList, "\n")) - return + *v = networkList + return nil } func (v NetworkList) Build() []string { - if v == "" { + if len(v) == 0 { return []string{N.NetworkTCP, N.NetworkUDP} } - return strings.Split(string(v), "\n") + return v } type Listable[T comparable] []T @@ -91,13 +93,14 @@ func (l Listable[T]) MarshalJSON() ([]byte, error) { return json.Marshal([]T(l)) } -func (l *Listable[T]) UnmarshalJSON(content []byte) (err error) { +func (l *Listable[T]) UnmarshalJSON(content []byte) error { if len(content) > 0 && content[0] != '[' { var element T - if err = json.Unmarshal(content, &element); err == nil { + err := json.Unmarshal(content, &element) + if err == nil { *l = []T{element} + return nil } - return } return json.Unmarshal(content, (*[]T)(l)) }