- Most functions now live directly in the dbx package - dbxp and dbxm are now ONLY the few functions that cannot be shared
37 lines
847 B
Go
37 lines
847 B
Go
package dbxshared
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
// DestName returns the name of the type passed as `destTypeStruct` as a string,
|
|
// normalized for compatibility with the Jet QRM.
|
|
func DestName(destTypeStruct any, path ...string) string {
|
|
v := reflect.ValueOf(destTypeStruct)
|
|
for v.Kind() == reflect.Ptr {
|
|
v = v.Elem()
|
|
}
|
|
|
|
destIdent := v.Type().String()
|
|
destIdent = destIdent[strings.LastIndex(destIdent, ".")+1:]
|
|
|
|
for i, p := range path {
|
|
if v.Kind() != reflect.Struct {
|
|
DBModule.Logger().Error("DestName: path parent is not a struct", "path", destIdent+"."+strings.Join(path[:i+1], "."))
|
|
return ""
|
|
}
|
|
|
|
v = v.FieldByName(p)
|
|
|
|
if !v.IsValid() {
|
|
DBModule.Logger().Error("DestName: field does not exist", "path", destIdent+"."+strings.Join(path[:i+1], "."))
|
|
return ""
|
|
}
|
|
|
|
destIdent += "." + p
|
|
}
|
|
|
|
return destIdent
|
|
}
|