/
console.go
54 lines (44 loc) · 1.02 KB
/
console.go
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
package v8
/*
#include "v8/vm.h"
*/
import "C"
import (
"errors"
"reflect"
)
// Error message
var (
ErrConsoleNoLogger = errors.New("no logger error")
ErrConsoleInvalidLogLevel = errors.New("log invalid level")
validLogLevelMap = map[string]bool{
"Debug": true,
"Info": true,
"Warn": true,
"Error": true,
}
)
//export goConsoleLog
func goConsoleLog(cSbx C.SandboxPtr, logLevel, logDetail C.CStr) *C.char {
sbx, ok := GetSandbox(cSbx)
if !ok {
return C.CString(ErrGetSandbox.Error())
}
levelStr := logLevel.GoString()
detailStr := logDetail.GoString()
if sbx.host.Logger() == nil {
return C.CString(ErrConsoleNoLogger.Error())
}
loggerVal := reflect.ValueOf(sbx.host.Logger())
loggerFunc := loggerVal.MethodByName(levelStr)
if _, ok := validLogLevelMap[levelStr]; !ok {
return C.CString(ErrConsoleInvalidLogLevel.Error())
}
if !loggerFunc.IsValid() {
return C.CString(ErrConsoleInvalidLogLevel.Error())
}
loggerFunc.Call([]reflect.Value{
reflect.ValueOf(detailStr),
})
return nil
}