d3orm/orm/entity/name.go
2024-01-10 02:32:42 +03:00

49 lines
873 B
Go

package entity
import (
"fmt"
"reflect"
"strings"
)
type Name string
func NameFromEntity(e any) Name {
t := reflect.TypeOf(e)
switch t.Kind() {
case reflect.Ptr:
return Name(fmt.Sprintf("%s/%s", t.Elem().PkgPath(), t.Elem().Name()))
default:
return Name(fmt.Sprintf("%s/%s", t.PkgPath(), t.Name()))
}
}
func nameFromTag(tag string, parentName Name) Name {
defined := Name(tag)
if defined.IsShort() {
return parentName.Combine(defined)
}
return defined
}
func (n Name) Short() string {
path := strings.Split(string(n), "/")
return path[len(path)-1]
}
func (n Name) IsShort() bool {
return !strings.Contains(string(n), "/")
}
func (n Name) Equal(name Name) bool {
return n == name
}
func (n Name) Combine(entity Name) Name {
path := strings.Split(string(n), "/")
return Name(strings.Join(append(path[:len(path)-1], entity.Short()), "/"))
}