mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-05 19:59:37 -06:00
42 lines
808 B
Go
42 lines
808 B
Go
package indexer
|
|
|
|
import (
|
|
"errors"
|
|
"path"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func getType(v interface{}) (reflect.Value, error) {
|
|
rv := reflect.ValueOf(v)
|
|
for rv.Kind() == reflect.Ptr || rv.Kind() == reflect.Interface {
|
|
rv = rv.Elem()
|
|
}
|
|
if !rv.IsValid() {
|
|
return reflect.Value{}, errors.New("failed to read value via reflection")
|
|
}
|
|
|
|
return rv, nil
|
|
}
|
|
|
|
func getTypeFQN(t interface{}) string {
|
|
typ, _ := getType(t)
|
|
typeName := path.Join(typ.Type().PkgPath(), typ.Type().Name())
|
|
typeName = strings.ReplaceAll(typeName, "/", ".")
|
|
return typeName
|
|
}
|
|
|
|
func valueOf(v interface{}, field string) string {
|
|
r := reflect.ValueOf(v)
|
|
f := reflect.Indirect(r).FieldByName(field)
|
|
|
|
if f.Kind() == reflect.String {
|
|
return f.String()
|
|
}
|
|
if f.IsZero() {
|
|
return ""
|
|
}
|
|
return strconv.Itoa(int(f.Int()))
|
|
}
|