-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.go
More file actions
90 lines (75 loc) · 2.07 KB
/
utils.go
File metadata and controls
90 lines (75 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package PrettyLogger
import (
"fmt"
"reflect"
"runtime"
"strings"
)
func GetFuncName(params ...interface{}) string {
pc, _, _, ok := runtime.Caller(1)
if !ok {
return "unknown"
}
fn := runtime.FuncForPC(pc)
if fn == nil {
return "unknown"
}
fnName := fn.Name()
//fnName = "github.com/HannahMarsh/pi_t-experiment/internal/api/api_functions.SendOnion"
spl := strings.Split(fnName, ".")
if len(spl) > 2 {
fnName = fmt.Sprintf("%s.%s", spl[len(spl)-2], spl[len(spl)-1])
}
fnName = strings.ReplaceAll(fnName, "(", "")
fnName = strings.ReplaceAll(fnName, ")", "")
fnName = strings.ReplaceAll(fnName, "*", "")
if strings.Contains(fnName, "/") {
splf := strings.Split(fnName, "/")
fnName = splf[len(splf)-1]
}
paramStr := getParametersAsString(params...)
return fmt.Sprintf("%s(%s)", fnName, paramStr)
}
func GetFuncNameWithSkip(skip int) string {
pc, _, _, ok := runtime.Caller(skip)
if !ok {
return "unknown"
}
fn := runtime.FuncForPC(pc)
if fn == nil {
return "unknown"
}
fnName := fn.Name()
//fnName = "github.com/HannahMarsh/pi_t-experiment/internal/api/api_functions.SendOnion"
spl := strings.Split(fnName, ".")
if len(spl) > 2 {
fnName = fmt.Sprintf("%s.%s", spl[len(spl)-2], spl[len(spl)-1])
}
fnName = strings.ReplaceAll(fnName, "(", "")
fnName = strings.ReplaceAll(fnName, ")", "")
fnName = strings.ReplaceAll(fnName, "*", "")
if strings.Contains(fnName, "/") {
splf := strings.Split(fnName, "/")
fnName = splf[len(splf)-1]
}
spl = strings.Split(fnName, ".")
fnName = spl[len(spl)-1]
return fmt.Sprintf("%s", fnName)
}
func getParametersAsString(params ...interface{}) string {
if len(params) == 0 {
return ""
}
// Handle the method receiver separately
paramStrs := []string{}
for _, param := range params {
paramValue := reflect.ValueOf(param)
paramType := reflect.TypeOf(param)
if paramType.Kind() == reflect.String {
paramStrs = append(paramStrs, fmt.Sprintf("%q", paramValue.Interface()))
} else {
paramStrs = append(paramStrs, fmt.Sprintf("%v", paramValue.Interface()))
}
}
return strings.Join(paramStrs, ", ")
}