🎉 Commit of go-promises

This commit is contained in:
Dan Jones 2024-12-27 15:19:49 -06:00
commit 5d84d26c3a
Signed by: dan
GPG key ID: 5B3B0F7217473A29
13 changed files with 238 additions and 0 deletions

67
value.go Normal file
View 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)
}