🎉 Commit of go-promises
This commit is contained in:
commit
5d84d26c3a
13 changed files with 238 additions and 0 deletions
67
value.go
Normal file
67
value.go
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
package promises
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
func ValueOf(val any) (js.Value, error) {
|
||||
switch v := val.(type) {
|
||||
case js.Value:
|
||||
return v, nil
|
||||
case js.Func:
|
||||
return js.ValueOf(v), nil
|
||||
case nil:
|
||||
return js.Null(), nil
|
||||
case bool:
|
||||
return js.ValueOf(v), nil
|
||||
case int:
|
||||
return js.ValueOf(v), nil
|
||||
case int8:
|
||||
return js.ValueOf(v), nil
|
||||
case int16:
|
||||
return js.ValueOf(v), nil
|
||||
case int32:
|
||||
return js.ValueOf(v), nil
|
||||
case int64:
|
||||
return js.ValueOf(v), nil
|
||||
case uint:
|
||||
return js.ValueOf(v), nil
|
||||
case uint8:
|
||||
return js.ValueOf(v), nil
|
||||
case uint16:
|
||||
return js.ValueOf(v), nil
|
||||
case uint32:
|
||||
return js.ValueOf(v), nil
|
||||
case uint64:
|
||||
return js.ValueOf(v), nil
|
||||
case float32:
|
||||
return js.ValueOf(v), nil
|
||||
case float64:
|
||||
return js.ValueOf(v), nil
|
||||
case string:
|
||||
return js.ValueOf(v), nil
|
||||
case []any:
|
||||
return js.ValueOf(v), nil
|
||||
case map[string]any:
|
||||
return js.ValueOf(v), nil
|
||||
case []byte:
|
||||
return js.ValueOf(string(v)), nil
|
||||
default:
|
||||
by, marshalErr := json.Marshal(val)
|
||||
if marshalErr == nil {
|
||||
m := make(map[string]any)
|
||||
unmarshallErr := json.Unmarshal(by, &m)
|
||||
if unmarshallErr == nil {
|
||||
return js.ValueOf(m), nil
|
||||
}
|
||||
s := []any{}
|
||||
unmarshallErr = json.Unmarshal(by, &s)
|
||||
if unmarshallErr == nil {
|
||||
return js.ValueOf(s), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return js.Value{}, fmt.Errorf("unable to create a JS value for %T", val)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue