Select Git revision
reflection.go
-
Cornel Rautenbach authoredCornel Rautenbach authored
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))
}