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