Skip to content
Snippets Groups Projects
Select Git revision
  • df3a747b688261f190b21de30a5204ef43936783
  • 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

reflection.go

Blame
  • reflection.go 1.92 KiB
    package reflection
    
    import (
    	"reflect"
    	"time"
    
    	"gitlab.com/uafrica/go-utils/logs"
    )
    
    func SetPointerTime(field reflect.Value, value *time.Time) {
    	if !isFieldValid(field, false) {
    		return // Field doesn't exist
    	}
    
    	if field.Kind() != reflect.Ptr {
    		logs.LogErrorMessageText("Field need to be *Field")
    		return
    	}
    	field.Set(reflect.ValueOf(value))
    }
    
    func SetInt64(field reflect.Value, value int64) {
    	if !isFieldValid(field, false) {
    		return // Field doesn't exist
    	}
    	if field.Kind() != reflect.Int64 {
    		logs.LogErrorMessageText("Claims: Field is not of type Int64")
    		return
    	}
    	if field.OverflowInt(value) {
    		logs.LogErrorMessageText("Claims: Int overflow")
    		return
    	}
    	field.SetInt(value)
    }
    
    func SetPointerInt64(field reflect.Value, value *int64) {
    	if !isFieldValid(field, false) {
    		return // Field doesn't exist
    	}
    
    	if field.Kind() != reflect.Ptr {
    		logs.LogErrorMessageText("Field need to be *Int64")
    		return
    	}
    
    	field.Set(reflect.ValueOf(value))
    }
    
    func SetString(field reflect.Value, value string) {
    	if !isFieldValid(field, false) {
    		return // Field doesn't exist
    	}
    	if field.Kind() != reflect.String {
    		return
    	}
    	field.SetString(value)
    }
    
    func GetStringValue(field reflect.Value) string {
    	if !isFieldValid(field, true) {
    		return ""
    	}
    
    	if field.Kind() == reflect.String {
    		return field.String()
    	}
    	if field.Kind() == reflect.Ptr && !field.IsNil() {
    		return field.Elem().String()
    	}
    	return ""
    }
    
    func GetInt64Value(field reflect.Value) int64 {
    	if !isFieldValid(field, true) {
    		return 0
    	}
    
    	if field.Kind() == reflect.Int64 {
    		return field.Int()
    	}
    	return 0
    }
    
    func isFieldValid(field reflect.Value, readonly bool) bool {
    	if readonly {
    		return field.IsValid()
    	}
    
    	return field.IsValid() && field.CanSet()
    }
    
    func SetPointerString(field reflect.Value, value *string) {
    	if !isFieldValid(field, false) {
    		return // Field doesn't exist
    	}
    	if field.Kind() != reflect.Ptr {
    		return
    	}
    	field.Set(reflect.ValueOf(value))
    }