Browse Source

feat: add jsonpb marshallers (#3165)

Kasefuchs 1 year ago
parent
commit
6a242d1e2e
3 changed files with 22 additions and 0 deletions
  1. 6 0
      common/net/address.go
  2. 10 0
      common/net/network.go
  3. 6 0
      proxy/shadowsocks/simplified/config.go

+ 6 - 0
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)
+}

+ 10 - 0
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 {

+ 6 - 0
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)