| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | package confimport (	"encoding/json"	"errors"	"strings"	v2net "v2ray.com/core/common/net")type Address struct {	v2net.Address}func (this *Address) UnmarshalJSON(data []byte) error {	var rawStr string	if err := json.Unmarshal(data, &rawStr); err != nil {		return err	}	this.Address = v2net.ParseAddress(rawStr)	return nil}func (this *Address) Build() *v2net.IPOrDomain {	if this.Family().IsDomain() {		return &v2net.IPOrDomain{			Address: &v2net.IPOrDomain_Domain{				Domain: this.Domain(),			},		}	}	return &v2net.IPOrDomain{		Address: &v2net.IPOrDomain_Ip{			Ip: []byte(this.IP()),		},	}}type Network stringfunc (this Network) Build() v2net.Network {	return v2net.ParseNetwork(string(this))}type NetworkList []Networkfunc (this *NetworkList) UnmarshalJSON(data []byte) error {	var strarray []Network	if err := json.Unmarshal(data, &strarray); err == nil {		nl := NetworkList(strarray)		*this = nl		return nil	}	var rawstr Network	if err := json.Unmarshal(data, &rawstr); err == nil {		strlist := strings.Split(string(rawstr), ",")		nl := make([]Network, len(strlist))		for idx, network := range strlist {			nl[idx] = Network(network)		}		*this = nl		return nil	}	return errors.New("Unknown format of a string list: " + string(data))}func (this *NetworkList) Build() *v2net.NetworkList {	list := new(v2net.NetworkList)	for _, network := range *this {		list.Network = append(list.Network, network.Build())	}	return list}
 |