github.com/twilio/twilio-go@v1.20.1/client/page_util.go (about) 1 package client 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "strings" 7 ) 8 9 // Takes a limit on the max number of records to read and a max pageSize and calculates the max number of pages to read. 10 func ReadLimits(pageSize *int, limit *int) int { 11 //don't care about pageSize 12 if pageSize == nil { 13 if limit == nil { 14 //don't care about the limit either 15 return 50 //default 16 } 17 //return the most efficient pageSize 18 return min(*limit, 1000) 19 } else { 20 if limit == nil { 21 //we care about the pageSize but not the limit 22 return *pageSize 23 } 24 return min(*pageSize, *limit) 25 } 26 } 27 28 func GetNext(baseUrl string, response interface{}, getNextPage func(nextPageUri string) (interface{}, error)) (interface{}, error) { 29 nextPageUrl, err := getNextPageUrl(baseUrl, response) 30 if err != nil { 31 return nil, err 32 } 33 34 return getNextPage(nextPageUrl) 35 } 36 37 func toMap(s interface{}) (map[string]interface{}, error) { 38 var payload map[string]interface{} 39 data, err := json.Marshal(s) 40 if err != nil { 41 return nil, err 42 } 43 44 err = json.Unmarshal(data, &payload) 45 if err != nil { 46 return nil, err 47 } 48 49 return payload, err 50 } 51 52 func getNextPageUrl(baseUrl string, response interface{}) (string, error) { 53 payload, err := toMap(response) 54 if err != nil { 55 return "", err 56 } 57 58 if payload != nil && payload["meta"] != nil && payload["meta"].(map[string]interface{})["next_page_url"] != nil { 59 return payload["meta"].(map[string]interface{})["next_page_url"].(string), nil 60 } 61 62 if payload != nil && payload["next_page_uri"] != nil { 63 // remove any leading and trailing '/' 64 return fmt.Sprintf("%s/%s", strings.Trim(baseUrl, "/"), strings.Trim(payload["next_page_uri"].(string), "/")), nil 65 } 66 67 return "", nil 68 } 69 70 func min(a int, b int) int { 71 if a > b { 72 return b 73 } 74 return a 75 }