Skip to content
Snippets Groups Projects
reflection.go 2.42 KiB
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 {
Francé Wilke's avatar
Francé Wilke committed
		logs.ErrorMsg("Field need to be *Field")
		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 {
Francé Wilke's avatar
Francé Wilke committed
		logs.ErrorMsg("Claims: Field is not of type Int64")
		return
	}
	if field.OverflowInt(value) {
Francé Wilke's avatar
Francé Wilke committed
		logs.ErrorMsg("Claims: Int overflow")
func setPointerInt64(field reflect.Value, value *int64) {
	if !isFieldValid(field, false) {
		return // Field doesn't exist
	}

	if field.Kind() != reflect.Ptr {
Francé Wilke's avatar
Francé Wilke committed
		logs.ErrorMsg("Field need to be *Int64")
		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))
}

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()
}