github.com/0chain/gosdk@v1.17.11/core/conf/reader.go (about) 1 // pakcage conf provide config helpers for ~/.zcn/config.yaml, ~/.zcn/network.yaml and ~/.zcn/wallet.json 2 3 package conf 4 5 import ( 6 "encoding/json" 7 ) 8 9 // Reader a config reader 10 type Reader interface { 11 GetString(key string) string 12 GetInt(key string) int 13 GetStringSlice(key string) []string 14 } 15 16 // JSONReader read config from json 17 type JSONReader struct { 18 items map[string]json.RawMessage 19 } 20 21 func (r *JSONReader) getRawMessage(key string) (json.RawMessage, bool) { 22 if r == nil || r.items == nil { 23 return nil, false 24 } 25 v, ok := r.items[key] 26 if !ok { 27 return nil, false 28 } 29 30 return v, true 31 32 } 33 34 // GetString read string from key 35 func (r *JSONReader) GetString(key string) string { 36 v, ok := r.getRawMessage(key) 37 if !ok { 38 return "" 39 } 40 41 var s string 42 err := json.Unmarshal(v, &s) 43 if err != nil { 44 return "" 45 } 46 47 return s 48 } 49 50 // GetInt read int from key 51 func (r *JSONReader) GetInt(key string) int { 52 v, ok := r.getRawMessage(key) 53 if !ok { 54 return 0 55 } 56 57 var i int 58 59 err := json.Unmarshal(v, &i) 60 if err != nil { 61 return 0 62 } 63 64 return i 65 } 66 67 // GetStringSlice get string slice from key 68 func (r *JSONReader) GetStringSlice(key string) []string { 69 70 v, ok := r.getRawMessage(key) 71 if !ok { 72 return nil 73 } 74 75 var list []string 76 77 err := json.Unmarshal(v, &list) 78 if err != nil { 79 return nil 80 } 81 82 return list 83 } 84 85 // NewReaderFromJSON create a JSONReader from json string 86 func NewReaderFromJSON(data string) (Reader, error) { 87 88 var items map[string]json.RawMessage 89 90 err := json.Unmarshal([]byte(data), &items) 91 92 if err != nil { 93 return nil, err 94 } 95 96 return &JSONReader{ 97 items: items, 98 }, nil 99 }