diff --git a/sdk/go/message.go b/sdk/go/message.go index f435e34a165..9a54bc60bf1 100644 --- a/sdk/go/message.go +++ b/sdk/go/message.go @@ -13,8 +13,6 @@ import ( "io/ioutil" "net/http" "strings" - - "github.com/mainflux/mainflux" ) func (sdk mfSDK) SendMessage(chanName, msg, token string) error { @@ -53,7 +51,7 @@ func (sdk mfSDK) SendMessage(chanName, msg, token string) error { return nil } -func (sdk mfSDK) ReadMessages(chanName, token string) ([]mainflux.Message, error) { +func (sdk mfSDK) ReadMessages(chanName, token string) (MessagesPage, error) { chanNameParts := strings.SplitN(chanName, ".", 2) chanID := chanNameParts[0] subtopicPart := "" @@ -66,36 +64,41 @@ func (sdk mfSDK) ReadMessages(chanName, token string) ([]mainflux.Message, error req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { - return nil, err + return MessagesPage{}, err } resp, err := sdk.sendRequest(req, token, string(sdk.msgContentType)) if err != nil { - return nil, err + return MessagesPage{}, err } body, err := ioutil.ReadAll(resp.Body) if err != nil { - return nil, err + return MessagesPage{}, err } if resp.StatusCode != http.StatusOK { switch resp.StatusCode { case http.StatusBadRequest: - return nil, ErrInvalidArgs + return MessagesPage{}, ErrInvalidArgs case http.StatusForbidden: - return nil, ErrUnauthorized + return MessagesPage{}, ErrUnauthorized default: - return nil, ErrFailedRead + return MessagesPage{}, ErrFailedRead } } - var l listMessagesRes - if err := json.Unmarshal(body, &l); err != nil { - return nil, err + mp := messagesPageRes{} + if err := json.Unmarshal(body, &mp); err != nil { + return MessagesPage{}, err } - return l.Messages, nil + return MessagesPage{ + Total: mp.Total, + Offset: mp.Offset, + Limit: mp.Limit, + Messages: mp.Messages, + }, nil } func (sdk *mfSDK) SetContentType(ct ContentType) error { diff --git a/sdk/go/responses.go b/sdk/go/responses.go index 9969e549ff2..e77a51cc846 100644 --- a/sdk/go/responses.go +++ b/sdk/go/responses.go @@ -27,6 +27,9 @@ type channelsPageRes struct { Limit uint64 `json:"limit"` } -type listMessagesRes struct { +type messagesPageRes struct { + Total uint64 `json:"total"` + Offset uint64 `json:"offset"` + Limit uint64 `json:"limit"` Messages []mainflux.Message `json:"messages,omitempty"` } diff --git a/sdk/go/sdk.go b/sdk/go/sdk.go index 3c5bf5f6811..2557b106742 100644 --- a/sdk/go/sdk.go +++ b/sdk/go/sdk.go @@ -112,6 +112,14 @@ type ChannelsPage struct { Limit uint64 `json:"limit"` } +// MessagesPage contains list of messages in a page with proper metadata. +type MessagesPage struct { + Total uint64 `json:"total"` + Offset uint64 `json:"offset"` + Limit uint64 `json:"limit"` + Messages []mainflux.Message `json:"messages,omitempty"` +} + // SDK contains Mainflux API. type SDK interface { // CreateUser registers mainflux user. @@ -168,7 +176,7 @@ type SDK interface { SendMessage(chanID, msg, token string) error // ReadMessages read messages of specified channel. - ReadMessages(chanID, token string) ([]mainflux.Message, error) + ReadMessages(chanID, token string) (MessagesPage, error) // SetContentType sets message content type. SetContentType(ct ContentType) error