Newer
Older
package reflection
import (
"reflect"
"time"
"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/logs"
func SetTimeField(field reflect.Value, value time.Time) {
if field.Kind() == reflect.Ptr {
// Pointer to accountID
setPointerTime(field, &value)
}
}
func setPointerTime(field reflect.Value, value *time.Time) {
if !isFieldValid(field, false) {
return // Field doesn't exist
}
if field.Kind() != reflect.Ptr {
return
}
field.Set(reflect.ValueOf(value))
}
func SetInt64Field(field reflect.Value, value int64) {
if field.Kind() == reflect.Ptr {
// Pointer to accountID
setPointerInt64(field, &value)
} else {
setInt64(field, value)
}
}
func setInt64(field reflect.Value, value int64) {
if !isFieldValid(field, false) {
return // Field doesn't exist
}
if field.Kind() != reflect.Int64 {
return
}
if field.OverflowInt(value) {
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 {
return
}
field.Set(reflect.ValueOf(value))
}
func SetStringField(field reflect.Value, value string) {
if field.Kind() == reflect.Ptr {
// Pointer to accountID
setPointerString(field, &value)
} else {
setString(field, 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 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))
}
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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()
}