network.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. // HasNetwork returns true if the network list has a certain network.
  34. func HasNetwork(list []Network, network Network) bool {
  35. for _, value := range list {
  36. if value == network {
  37. return true
  38. }
  39. }
  40. return false
  41. }
  42. func ParseNetwork(net string) Network {
  43. switch strings.ToLower(net) {
  44. case "tcp":
  45. return Network_TCP
  46. case "udp":
  47. return Network_UDP
  48. case "unix":
  49. return Network_UNIX
  50. default:
  51. return Network_Unknown
  52. }
  53. }
  54. func ParseNetworkStringList(strList []string) []Network {
  55. list := make([]Network, len(strList))
  56. for idx, str := range strList {
  57. list[idx] = ParseNetwork(str)
  58. }
  59. return list
  60. }