github.com/DoNewsCode/core@v0.12.3/helper.go (about)

     1  package core
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  func getString(data map[string]interface{}, key ...string) (string, error) {
    10  	if len(key) <= 0 {
    11  		panic("key must be provided at least once")
    12  	}
    13  	for i := 0; i < len(key)-1; i++ {
    14  		value, ok := data[key[i]]
    15  		if !ok {
    16  			return "", fmt.Errorf("%s doesn't exist", strings.Join(key[0:i+1], "."))
    17  		}
    18  		data, ok = value.(map[string]interface{})
    19  		if !ok {
    20  			return "", fmt.Errorf("%s is not a map", strings.Join(key[0:i+1], "."))
    21  		}
    22  	}
    23  	value, ok := data[key[len(key)-1]]
    24  	if !ok {
    25  		return "", fmt.Errorf("%s doesn't exist", strings.Join(key, "."))
    26  	}
    27  	str, ok := value.(string)
    28  	if !ok {
    29  		return str, errors.New("must be a string")
    30  	}
    31  	return str, nil
    32  }
    33  
    34  func getBool(data map[string]interface{}, key ...string) (bool, error) {
    35  	if len(key) <= 0 {
    36  		panic("key must be provided at least once")
    37  	}
    38  	for i := 0; i < len(key)-1; i++ {
    39  		value, ok := data[key[i]]
    40  		if !ok {
    41  			return false, fmt.Errorf("%s doesn't exist", strings.Join(key[0:i+1], "."))
    42  		}
    43  		data, ok = value.(map[string]interface{})
    44  		if !ok {
    45  			return false, fmt.Errorf("%s is not a map", strings.Join(key[0:i+1], "."))
    46  		}
    47  	}
    48  	value, ok := data[key[len(key)-1]]
    49  	if !ok {
    50  		return false, fmt.Errorf("%s doesn't exist", strings.Join(key, "."))
    51  	}
    52  	b, ok := value.(bool)
    53  	if !ok {
    54  		return b, errors.New("must be a bool")
    55  	}
    56  	return b, nil
    57  }
    58  
    59  // isValidLevel tests if the given input is valid level config.
    60  func isValidLevel(levelCfg string) bool {
    61  	validLevel := []string{"debug", "info", "warn", "error", "none"}
    62  	for i := range validLevel {
    63  		if validLevel[i] == levelCfg {
    64  			return true
    65  		}
    66  	}
    67  	return false
    68  }
    69  
    70  // isValidLevel tests if the given input is valid format config.
    71  func isValidFormat(format string) bool {
    72  	validFormat := []string{"json", "logfmt"}
    73  	for i := range validFormat {
    74  		if validFormat[i] == format {
    75  			return true
    76  		}
    77  	}
    78  	return false
    79  }