Skip to content

Commit 29ede46

Browse files
committed
Changed APIResonse struct to generics to not make assumptions about format used in the Data response field
1 parent 224a9f7 commit 29ede46

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

internal/api/api.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func NewRequest(method string, path string, queryParameters []string, body []byt
3535
var err error
3636
var cursor string
3737

38-
isExtensionsEndpoint := false // https://github.com/twitchdev/twitch-cli/issues/157
38+
isExtensionsLiveEndpoint := false // https://github.com/twitchdev/twitch-cli/issues/157
3939

4040
data.Data = make([]interface{}, 0)
4141
client, err := GetClientInformation()
@@ -104,7 +104,7 @@ func NewRequest(method string, path string, queryParameters []string, body []byt
104104
}
105105
if strings.Contains(u.String(), "extensions/live") {
106106
// https://github.com/twitchdev/twitch-cli/issues/157
107-
isExtensionsEndpoint = true
107+
isExtensionsLiveEndpoint = true
108108
var extensionsBody models.ExtensionAPIResponse
109109
err = json.Unmarshal(resp.Body, &extensionsBody)
110110
if err != nil {
@@ -181,12 +181,17 @@ func NewRequest(method string, path string, queryParameters []string, body []byt
181181
data.Data = make([]interface{}, 0)
182182
}
183183
// handle json marshalling better; returns empty slice vs. null
184-
if !strings.Contains(path, "schedule") && len(data.Data.([]interface{})) == 0 && data.Error == "" {
184+
_, isInterface := data.Data.([]interface{})
185+
if isInterface && !strings.Contains(path, "schedule") && len(data.Data.([]interface{})) == 0 && data.Error == "" {
185186
data.Data = make([]interface{}, 0)
186187
}
188+
_, isStringMap := data.Data.(map[string]any)
189+
if isStringMap && !strings.Contains(path, "schedule") && len(data.Data.(map[string]any)) == 0 && data.Error == "" {
190+
data.Data = make(map[string]any, 0)
191+
}
187192

188193
var d []byte
189-
if isExtensionsEndpoint {
194+
if isExtensionsLiveEndpoint {
190195
extensionBody := models.ExtensionAPIResponse{
191196
Data: data.Data,
192197
Pagination: &data.Pagination.Cursor,

internal/models/api.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
package models
44

55
type APIResponse struct {
6-
Data interface{} `json:"data,omitempty"`
6+
Data any `json:"data,omitempty"`
77
Pagination *APIPagination `json:"pagination,omitempty"`
88
Error string `json:"error,omitempty"`
99
Status int `json:"status,omitempty"`
@@ -22,7 +22,7 @@ type BitsLeaderboardDateRange struct {
2222
EndedAt string `json:"ended_at"`
2323
}
2424

25-
type ExtensionAPIResponse struct {
25+
type ExtensionAPIResponse struct { // extensions/live
2626
Data interface{} `json:"data,omitempty"`
2727
Pagination *string `json:"pagination,omitempty"`
2828
Error string `json:"error,omitempty"`

0 commit comments

Comments
 (0)