github.com/status-im/status-go@v1.1.0/services/wallet/thirdparty/paraswap/request_token_list.go (about) 1 package paraswap 2 3 import ( 4 "context" 5 "encoding/json" 6 "errors" 7 "fmt" 8 ) 9 10 const tokensURL = "https://api.paraswap.io/tokens/%d" // nolint: gosec 11 12 type Token struct { 13 Symbol string `json:"symbol"` 14 Address string `json:"address"` 15 Decimals uint `json:"decimals"` 16 Img string `json:"img"` 17 Network int `json:"network"` 18 } 19 20 type TokensResponse struct { 21 Tokens []Token `json:"tokens"` 22 Error string `json:"error"` 23 } 24 25 func (c *ClientV5) FetchTokensList(ctx context.Context) ([]Token, error) { 26 url := fmt.Sprintf(tokensURL, c.chainID) 27 response, err := c.httpClient.DoGetRequest(ctx, url, nil, nil) 28 if err != nil { 29 return nil, err 30 } 31 32 return handleTokensListResponse(response) 33 } 34 35 func handleTokensListResponse(response []byte) ([]Token, error) { 36 var tokensResponse TokensResponse 37 err := json.Unmarshal(response, &tokensResponse) 38 if err != nil { 39 return nil, err 40 } 41 42 if tokensResponse.Error != "" { 43 return nil, errors.New(tokensResponse.Error) 44 } 45 46 return tokensResponse.Tokens, nil 47 }