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  }