github.com/InjectiveLabs/sdk-go@v1.53.0/client/core/tokens_file_loader.go (about)

     1  package core
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  )
     8  
     9  type TokenMetadata struct {
    10  	Address           string `json:"address"`
    11  	IsNative          bool   `json:"isNative"`
    12  	TokenVerification string `json:"tokenVerification"`
    13  	Decimals          int32  `json:"decimals"`
    14  	CoinGeckoId       string `json:"coinGeckoId"`
    15  	Name              string `json:"name"`
    16  	Symbol            string `json:"symbol"`
    17  	Logo              string `json:"logo"`
    18  	Creator           string `json:"creator"`
    19  	Denom             string `json:"denom"`
    20  	TokenType         string `json:"tokenType"`
    21  	ExternalLogo      string `json:"externalLogo"`
    22  }
    23  
    24  func (tm TokenMetadata) GetName() string {
    25  	return tm.Name
    26  }
    27  
    28  func (tm TokenMetadata) GetAddress() string {
    29  	return tm.Address
    30  }
    31  
    32  func (tm TokenMetadata) GetSymbol() string {
    33  	return tm.Symbol
    34  }
    35  
    36  func (tm TokenMetadata) GetLogo() string {
    37  	return tm.Logo
    38  }
    39  
    40  func (tm TokenMetadata) GetDecimals() int32 {
    41  	return tm.Decimals
    42  }
    43  
    44  func (tm TokenMetadata) GetUpdatedAt() int64 {
    45  	return -1
    46  }
    47  
    48  // LoadTokens loads tokens from the given file URL
    49  func LoadTokens(tokensFileURL string) ([]TokenMetadata, error) {
    50  	var tokensMetadata []TokenMetadata
    51  	response, err := http.Get(tokensFileURL) // nolint:gosec // we want the URL to be parameterizable
    52  	if err != nil {
    53  		return tokensMetadata, err
    54  	}
    55  	if 400 <= response.StatusCode {
    56  		return tokensMetadata, fmt.Errorf("failed to load tokens from %s: %s", tokensFileURL, response.Status)
    57  	}
    58  	defer response.Body.Close()
    59  
    60  	decoder := json.NewDecoder(response.Body)
    61  	err = decoder.Decode(&tokensMetadata)
    62  	if err != nil {
    63  		return make([]TokenMetadata, 0), err
    64  	}
    65  
    66  	return tokensMetadata, nil
    67  }