From 0f7a350f1a3182f1adb7e83f8e24b2907665c34a Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 24 Dec 2019 00:17:40 -0500 Subject: [PATCH] Add error handling to general example --- chat.go | 8 ++++---- docs.go | 5 +++++ types.go | 30 +++++++++++++++--------------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/chat.go b/chat.go index 4fcaa2a..3af1c4f 100644 --- a/chat.go +++ b/chat.go @@ -74,8 +74,8 @@ func getNewMessages(k *Keybase, c chan<- ChatAPI, execOptions []string) { for scanner.Scan() { var jsonData ChatAPI json.Unmarshal([]byte(scanner.Text()), &jsonData) - if len([]byte(jsonData.ErrorRaw)) > 0 { - var errorListen = string(jsonData.ErrorRaw) + if jsonData.ErrorRaw != nil { + var errorListen = string(*jsonData.ErrorRaw) jsonData.ErrorListen = &errorListen } c <- jsonData @@ -155,9 +155,9 @@ func chatAPIOut(k *Keybase, c ChatAPI) (ChatAPI, error) { if err := json.Unmarshal(cmdOut, &r); err != nil { return ChatAPI{}, err } - if len([]byte(r.ErrorRaw)) > 0 { + if r.ErrorRaw != nil { var errorRead Error - json.Unmarshal([]byte(r.ErrorRaw), &errorRead) + json.Unmarshal([]byte(*r.ErrorRaw), &errorRead) r.ErrorRead = &errorRead return r, errors.New(r.ErrorRead.Message) } diff --git a/docs.go b/docs.go index 4afcbb6..d6cee83 100644 --- a/docs.go +++ b/docs.go @@ -48,6 +48,11 @@ in @mkbot#test1: } func handler(m keybase.ChatAPI) { + if m.ErrorListen != nil { + fmt.Printf("Error: %s\n", *m.ErrorListen) + return + } + msgType := m.Msg.Content.Type msgID := m.Msg.ID deviceName := m.Msg.Sender.DeviceName diff --git a/types.go b/types.go index 483867a..e7556f6 100644 --- a/types.go +++ b/types.go @@ -19,21 +19,21 @@ type RunOptions struct { // ChatAPI holds information about a message received by the `keybase chat api-listen` command type ChatAPI struct { - Type string `json:"type,omitempty"` - Source string `json:"source,omitempty"` - Msg *msg `json:"msg,omitempty"` - Method string `json:"method,omitempty"` - Params *params `json:"params,omitempty"` - Message string `json:"message,omitempty"` - ID int `json:"id,omitempty"` - Ratelimits []rateLimits `json:"ratelimits,omitempty"` - Notification *notification `json:"notification,omitempty"` - Result *result `json:"result,omitempty"` - Pagination *pagination `json:"pagination,omitempty"` - ErrorRaw json.RawMessage `json:"error,omitempty"` // Raw JSON string containit any errors returned - ErrorRead *Error `json:"-"` // Errors returned by any outgoing chat functions such as Read(), Edit(), etc - ErrorListen *string `json:"-"` // Errors returned by the api-listen command (used in the Run() function) - keybase Keybase // Some methods will need this, so I'm passing it but keeping it unexported + Type string `json:"type,omitempty"` + Source string `json:"source,omitempty"` + Msg *msg `json:"msg,omitempty"` + Method string `json:"method,omitempty"` + Params *params `json:"params,omitempty"` + Message string `json:"message,omitempty"` + ID int `json:"id,omitempty"` + Ratelimits []rateLimits `json:"ratelimits,omitempty"` + Notification *notification `json:"notification,omitempty"` + Result *result `json:"result,omitempty"` + Pagination *pagination `json:"pagination,omitempty"` + ErrorRaw *json.RawMessage `json:"error,omitempty"` // Raw JSON string containing any errors returned + ErrorRead *Error `json:"-"` // Errors returned by any outgoing chat functions such as Read(), Edit(), etc + ErrorListen *string `json:"-"` // Errors returned by the api-listen command (used in the Run() function) + keybase Keybase // Some methods will need this, so I'm passing it but keeping it unexported } type sender struct {