* change domain to namespace * lower go.mod deps Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
		
			
				
	
	
		
			53 lines
		
	
	
		
			910 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			910 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package register
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
	"unicode"
 | 
						|
	"unicode/utf8"
 | 
						|
)
 | 
						|
 | 
						|
// ExtractValue from reflect.Type from specified depth
 | 
						|
func ExtractValue(v reflect.Type, d int) string {
 | 
						|
	if d == 3 {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	if v == nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
 | 
						|
	if v.Kind() == reflect.Ptr {
 | 
						|
		v = v.Elem()
 | 
						|
	}
 | 
						|
 | 
						|
	// slices and maps don't have a defined name
 | 
						|
	if (v.Kind() == reflect.Slice || v.Kind() == reflect.Map) || len(v.Name()) == 0 {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
 | 
						|
	// get the rune character
 | 
						|
	a, _ := utf8.DecodeRuneInString(string(v.Name()[0]))
 | 
						|
 | 
						|
	// crude check for is unexported field
 | 
						|
	if unicode.IsLower(a) {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
 | 
						|
	return v.Name()
 | 
						|
}
 | 
						|
 | 
						|
// ExtractSubValue exctact *Value from reflect.Type
 | 
						|
func ExtractSubValue(typ reflect.Type) string {
 | 
						|
	var reqType reflect.Type
 | 
						|
	switch typ.NumIn() {
 | 
						|
	case 1:
 | 
						|
		reqType = typ.In(0)
 | 
						|
	case 2:
 | 
						|
		reqType = typ.In(1)
 | 
						|
	case 3:
 | 
						|
		reqType = typ.In(2)
 | 
						|
	default:
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	return ExtractValue(reqType, 0)
 | 
						|
}
 |