github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/generic/repository/sql/generic.utils.go (about) 1 package sql 2 3 import ( 4 "errors" 5 "reflect" 6 "regexp" 7 "strings" 8 ) 9 10 func GetCamelToSnakeCaseMapping(model interface{}) (map[string]string, error) { 11 val := reflect.ValueOf(model) 12 if val.Kind() != reflect.Struct { 13 return nil, errors.New("model must be a struct") 14 } 15 16 mapping := make(map[string]string) 17 18 for i := 0; i < val.Type().NumField(); i++ { 19 field := val.Type().Field(i) 20 propName := field.Name 21 22 // Convert propName to snake_case. 23 snakeCaseName := CamelToSnakeCase(propName) 24 25 mapping[propName] = snakeCaseName 26 } 27 28 return mapping, nil 29 } 30 31 func CamelToSnakeCase(input string) string { 32 r := regexp.MustCompile("([a-z0-9])([A-Z])") 33 snake := r.ReplaceAllString(input, "${1}_${2}") 34 return strings.ToLower(snake) 35 } 36 37 func IsNumber(a interface{}) bool { 38 switch a.(type) { 39 case int, int8, int16, int32, int64, 40 uint, uint8, uint16, uint32, uint64, 41 float32, float64: 42 return true 43 default: 44 return false 45 } 46 }