diff --git a/core/constants/network.go b/core/constants/network.go new file mode 100644 index 0000000..b0f5355 --- /dev/null +++ b/core/constants/network.go @@ -0,0 +1,52 @@ +package constants + +import ( + "encoding/json" + "fmt" +) + +type PortType int + +const ( + PortTypeTCP PortType = iota + PortTypeUDP +) + +var ( + portTypeID = map[PortType]string{ + PortTypeTCP: "TCP", + PortTypeUDP: "UDP", + } + + portTypeName = map[string]PortType{ + "TCP": PortTypeTCP, + "UDP": PortTypeUDP, + } +) + +func (pt PortType) String() string { + return portTypeID[pt] +} + +func (pt PortType) MarshalJSON() ([]byte, error) { + value, ok := portTypeID[pt] + if !ok { + return nil, fmt.Errorf("Invalid EnumType[%s] value", pt) + } + return json.Marshal(value) +} + +func (pt PortType) UnmarshalJSON(b []byte) error { + var s string + err := json.Unmarshal(b, &s) + if err != nil { + return err + } + + value, ok := portTypeName[s] + if !ok { + return fmt.Errorf("Invalid EnumType[%s] value", s) + } + pt = value + return nil +}