diff --git a/common/net/address.go b/common/net/address.go index c4f623414ba..8fed065fd7c 100644 --- a/common/net/address.go +++ b/common/net/address.go @@ -221,3 +221,9 @@ func (d *IPOrDomain) UnmarshalJSONPB(unmarshaler *jsonpb.Unmarshaler, bytes []by d.Address = result.Address return nil } + +func (d *IPOrDomain) MarshalJSONPB(marshaler *jsonpb.Marshaler) ([]byte, error) { + ipod := d.AsAddress().String() + + return json.Marshal(ipod) +} diff --git a/common/net/network.go b/common/net/network.go index d372cb65cc4..f84a570f4f0 100644 --- a/common/net/network.go +++ b/common/net/network.go @@ -37,6 +37,16 @@ func (nl *NetworkList) UnmarshalJSONPB(unmarshaler *jsonpb.Unmarshaler, bytes [] return newError("unknown format of a string list: " + string(bytes)) } +func (nl *NetworkList) MarshalJSONPB(marshaler *jsonpb.Marshaler) ([]byte, error) { + networkStrList := make([]string, len(nl.Network)) + + for idx, network := range nl.Network { + networkStrList[idx] = network.String() + } + + return json.Marshal(networkStrList) +} + // HasNetwork returns true if the network list has a certain network. func HasNetwork(list []Network, network Network) bool { for _, value := range list { diff --git a/proxy/shadowsocks/simplified/config.go b/proxy/shadowsocks/simplified/config.go index 0bbdd18ac19..731ed23e6b0 100644 --- a/proxy/shadowsocks/simplified/config.go +++ b/proxy/shadowsocks/simplified/config.go @@ -26,6 +26,12 @@ func (c *CipherTypeWrapper) UnmarshalJSONPB(unmarshaler *jsonpb.Unmarshaler, byt return nil } +func (c *CipherTypeWrapper) MarshalJSONPB(marshaler *jsonpb.Marshaler) ([]byte, error) { + method := c.Value.String() + + return json.Marshal(method) +} + func init() { common.Must(common.RegisterConfig((*ServerConfig)(nil), func(ctx context.Context, config interface{}) (interface{}, error) { simplifiedServer := config.(*ServerConfig)