Skip to content
Snippets Groups Projects
Select Git revision
  • 6b24b1dbd795f51345adc7a55229fdd87d9ef084
  • main default protected
  • trading_hours
  • refactor_trading_hours
  • audit_cleaning_cater_for_non_struct_fields
  • remove-info-logs
  • sl-refactor
  • 18-use-scan-for-param-values
  • 17-order-search-results
  • 4-simplify-framework-2
  • 1-http-error
  • v1.297.0
  • v1.296.0
  • v1.295.0
  • v1.294.0
  • v1.293.0
  • v1.292.0
  • v1.291.0
  • v1.290.0
  • v1.289.0
  • v1.288.0
  • v1.287.0
  • v1.286.0
  • v1.285.0
  • v1.284.0
  • v1.283.0
  • v1.282.0
  • v1.281.0
  • v1.280.0
  • v1.279.0
  • v1.278.0
31 results

debug.go

Blame
  • struct_utils.go 5.73 KiB
    package struct_utils
    
    import (
    	"github.com/samber/lo"
    	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
    	"reflect"
    	"strings"
    )
    
    // KeyValuePair defines a key/value pair derived from form data
    type KeyValuePair struct {
    	Key   string `json:"key"`
    	Value string `json:"value"`
    }
    
    // FormToKeyValuePairs returns a string-based map of strings as derived from posted form keys and values.
    // e.g. oauth_consumer_key=mlhgs&oauth_consumer_secret=x240ar&oauth_verifier=b0qjbx&store_base_url=http%3A%2F%2Flocalhost.com%2Fstore
    func FormToKeyValuePairs(body string) []KeyValuePair {
    	out := []KeyValuePair{}
    	parts := strings.Split(body, "&")
    	for _, p := range parts {
    		split := strings.Split(p, "=")
    
    		var key string
    		if len(split) > 0 {
    			key = split[0]
    		}
    
    		var value string
    		if len(split) > 1 {
    			value = split[1]
    		}
    
    		kv := KeyValuePair{
    			Key:   key,
    			Value: value,
    		}
    		out = append(out, kv)
    	}
    
    	return out
    }
    
    // GetValue returns the value for the given key from a KeyValuePair slice.
    func GetValue(key string, kv []KeyValuePair) string {
    	for _, v := range kv {
    		if v.Key == key {
    			return v.Value
    		}
    	}
    
    	return ""
    }
    
    // ValidateRequiredFields checks the required tag on struct fields and returns an error if any are set to zero.
    func ValidateRequiredFields(object any, parentFieldKeys ...string) error {
    	objectValue := reflect.ValueOf(object)
    
    	if objectValue.Kind() == reflect.Interface {
    		objectValue = objectValue.Elem()
    	}
    
    	if objectValue.Kind() == reflect.Ptr {
    		objectValue = objectValue.Elem()
    	}
    
    	if objectValue.Kind() != reflect.Struct {
    		if objectValue.IsZero() {
    			errorKey := strings.Join(parentFieldKeys, ".")
    			return errors.Error(errorKey + " is required")