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 }