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 }