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  }