diff --git a/internal/msg.go b/internal/msg.go index 2840261..dc0599e 100644 --- a/internal/msg.go +++ b/internal/msg.go @@ -1,6 +1,8 @@ package internal import ( + "bytes" + "encoding/json" "fmt" "time" ) @@ -60,21 +62,45 @@ const ( ) func (c CmdVerb) String() string { - switch c { - case CmdStart: - return "start" - case CmdStop: - return "stop" - case CmdDisable: - return "disable" - case CmdRestart: - return "restart" - case CmdPing: - return "ping" - case CmdReload: - return "reload" + mapping := map[CmdVerb]string{ + CmdStart: "start", + CmdStop: "stop", + CmdDisable: "disable", + CmdRestart: "restart", + CmdPing: "ping", + CmdReload: "reload", } - return "unknown" + return mapping[c] +} + +func NewCmdVerbFromString(s string) CmdVerb { + mapping := map[string]CmdVerb{ + "start": CmdStart, + "stop": CmdStop, + "disable": CmdDisable, + "restart": CmdRestart, + "ping": CmdPing, + "reload": CmdReload, + } + return mapping[s] +} + +// Marshal and Unmarshal for CmdVerb +func (s CmdVerb) MarshalJSON() ([]byte, error) { + buffer := bytes.NewBufferString(`"`) + buffer.WriteString(s.String()) + buffer.WriteString(`"`) + return buffer.Bytes(), nil +} + +func (s *CmdVerb) UnmarshalJSON(b []byte) error { + var j string + err := json.Unmarshal(b, &j) + if err != nil { + return err + } + *s = NewCmdVerbFromString(j) + return nil } // A WorkerCmd is the command message send from the