network.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package net
  2. import (
  3. "encoding/json"
  4. "strings"
  5. "github.com/golang/protobuf/jsonpb"
  6. )
  7. func (n Network) SystemString() string {
  8. switch n {
  9. case Network_TCP:
  10. return "tcp"
  11. case Network_UDP:
  12. return "udp"
  13. case Network_UNIX:
  14. return "unix"
  15. default:
  16. return "unknown"
  17. }
  18. }
  19. func (nl *NetworkList) UnmarshalJSONPB(unmarshaler *jsonpb.Unmarshaler, bytes []byte) error {
  20. var networkStrList []string
  21. if err := json.Unmarshal(bytes, &networkStrList); err == nil {
  22. nl.Network = ParseNetworkStringList(networkStrList)
  23. return nil
  24. }
  25. var networkStr string
  26. if err := json.Unmarshal(bytes, &networkStr); err == nil {
  27. strList := strings.Split(networkStr, ",")
  28. nl.Network = ParseNetworkStringList(strList)
  29. return nil
  30. }
  31. return newError("unknown format of a string list: " + string(bytes))
  32. }
  33. func (nl *NetworkList) MarshalJSONPB(marshaler *jsonpb.Marshaler) ([]byte, error) {
  34. networkStrList := make([]string, len(nl.Network))
  35. for idx, network := range nl.Network {
  36. networkStrList[idx] = network.String()
  37. }
  38. return json.Marshal(networkStrList)
  39. }
  40. // HasNetwork returns true if the network list has a certain network.
  41. func HasNetwork(list []Network, network Network) bool {
  42. for _, value := range list {
  43. if value == network {
  44. return true
  45. }
  46. }
  47. return false
  48. }
  49. func ParseNetwork(net string) Network {
  50. switch strings.ToLower(net) {
  51. case "tcp":
  52. return Network_TCP
  53. case "udp":
  54. return Network_UDP
  55. case "unix":
  56. return Network_UNIX
  57. default:
  58. return Network_Unknown
  59. }
  60. }
  61. func ParseNetworkStringList(strList []string) []Network {
  62. list := make([]Network, len(strList))
  63. for idx, str := range strList {
  64. list[idx] = ParseNetwork(str)
  65. }
  66. return list
  67. }