Sitelet https://github.com/ConsiderItDone/polywrap-go/commit/4fe33134ea568de3b541bf65ffd2bda52d8ee087
Skip to content

Commit 4fe3313

Browse files
authored
PL-30 env, invoke, subinvoke (#8)
* PL-30 env PL-36 invoke, subinvoke * PL-36 implementetion-subinvoke
1 parent 19e890e commit 4fe3313

4 files changed

Lines changed: 133 additions & 22 deletions

File tree

‎polywrap/env.go‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package polywrap
2+
3+
import "unsafe"
4+
5+
//go:wasm-module wrap
6+
//export __wrap_load_env
7+
func __wrap_load_env(envPtr uint32)
8+
9+
func WrapLoadEnv(envSize uint32) []byte {
10+
envBuf := make([]byte, envSize)
11+
envPtr := unsafe.Pointer(&envBuf)
12+
13+
__wrap_load_env(*(*uint32)(envPtr))
14+
15+
return envBuf
16+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package polywrap
2+
3+
import "unsafe"
4+
5+
// Implementation Subinvoke Interface
6+
7+
//go:wasm-module wrap
8+
//export __wrap_subinvokeImplementation
9+
func __wrap_subinvokeImplementation(interfaceUriPtr, interfaceUriLen, implUriPtr, implUriLen, methodPtr, methodLen, argsPtr, argsLen uint32) bool
10+
11+
// Implementation Subinvoke Result
12+
13+
//go:wasm-module wrap
14+
//export __wrap_subinvokeImplementation_result_len
15+
func __wrap_subinvokeImplementation_result_len() uint32
16+
17+
//go:wasm-module wrap
18+
//export __wrap_subinvokeImplementation_result
19+
func __wrap_subinvokeImplementation_result(ptr uint32)
20+
21+
// Subinvoke Error
22+
23+
//go:wasm-module wrap
24+
//export __wrap_subinvokeImplementation_error_len
25+
func __wrap_subinvokeImplementation_error_len() uint32
26+
27+
//go:wasm-module wrap
28+
//export __wrap_subinvokeImplementation_error
29+
func __wrap_subinvokeImplementation_error(ptr uint32)
30+
31+
func WrapSubinvokeImplementation(interfaceUri, implUri, method string, args []byte) {
32+
interfaceUriPtr := unsafe.Pointer(&interfaceUri)
33+
implUriPtr := unsafe.Pointer(&implUri)
34+
methodPtr := unsafe.Pointer(&method)
35+
argsPtr := unsafe.Pointer(&args)
36+
37+
result := __wrap_subinvokeImplementation(*(*uint32)(interfaceUriPtr), uint32(len(interfaceUri)),
38+
*(*uint32)(implUriPtr), uint32(len(implUri)), *(*uint32)(methodPtr), uint32(len(method)),
39+
*(*uint32)(argsPtr), uint32(len(args)))
40+
41+
if !result {
42+
errorLen := __wrap_subinvokeImplementation_error_len()
43+
errorBuf := make([]byte, errorLen)
44+
errorPtr := unsafe.Pointer(&errorBuf)
45+
46+
__wrap_subinvokeImplementation_error(*(*uint32)(errorPtr))
47+
48+
// TODO return Result.Err
49+
}
50+
51+
resultLen := __wrap_subinvokeImplementation_result_len()
52+
resultBuf := make([]byte, resultLen)
53+
resultPtr := unsafe.Pointer(&resultBuf)
54+
55+
__wrap_subinvokeImplementation_result(*(*uint32)(resultPtr))
56+
57+
// TODO return Result.Ok
58+
}

‎polywrap/invoke.go‎

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ package polywrap
22

33
import "unsafe"
44

5-
//go:wasm-module w3
6-
//export __w3_invoke_args
7-
func __w3_invoke_args(methodPtr, argsPtr uint32)
5+
//go:wasm-module wrap
6+
//export __wrap_invoke_args
7+
func __wrap_invoke_args(methodPtr, argsPtr uint32)
88

9-
//go:wasm-module w3
10-
//export __w3_invoke_result
11-
func __w3_invoke_result(ptr, len uint32)
9+
//go:wasm-module wrap
10+
//export __wrap_invoke_result
11+
func __wrap_invoke_result(ptr, len uint32)
1212

13-
//go:wasm-module w3
14-
//export __w3_invoke_error
15-
func __w3_invoke_error(ptr, len uint32)
13+
//go:wasm-module wrap
14+
//export __wrap_invoke_error
15+
func __wrap_invoke_error(ptr, len uint32)
1616

1717
type invokeFunction func(argsBuf []byte) []byte
1818

@@ -21,14 +21,14 @@ type InvokeArgs struct {
2121
Args []byte
2222
}
2323

24-
func W3InvokeArgs(methodSize, argsSize uint32) InvokeArgs {
24+
func WrapInvokeArgs(methodSize, argsSize uint32) InvokeArgs {
2525
methodBuf := make([]byte, methodSize)
2626
methodPtr := unsafe.Pointer(&methodBuf)
2727

2828
argsBuf := make([]byte, argsSize)
2929
argsPtr := unsafe.Pointer(&argsBuf)
3030

31-
__w3_invoke_args(*(*uint32)(methodPtr), *(*uint32)(argsPtr))
31+
__wrap_invoke_args(*(*uint32)(methodPtr), *(*uint32)(argsPtr))
3232

3333
method := string(methodBuf)
3434

@@ -38,19 +38,19 @@ func W3InvokeArgs(methodSize, argsSize uint32) InvokeArgs {
3838
}
3939
}
4040

41-
func W3Invoke(args InvokeArgs, fn invokeFunction) bool {
41+
func WrapInvoke(args InvokeArgs, fn invokeFunction) bool {
4242
if fn != nil {
4343
result := fn(args.Args)
4444
resultPtr := unsafe.Pointer(&result)
4545

46-
__w3_invoke_result(*(*uint32)(resultPtr), uint32(len(result)))
46+
__wrap_invoke_result(*(*uint32)(resultPtr), uint32(len(result)))
4747

4848
return true
4949
} else {
5050
message := "Could not find invoke function \"" + args.Method + "\""
5151
messagePtr := unsafe.Pointer(&message)
5252

53-
__w3_invoke_error(*(*uint32)(messagePtr), uint32(len(message)))
53+
__wrap_invoke_error(*(*uint32)(messagePtr), uint32(len(message)))
5454

5555
return false
5656
}

‎polywrap/subinvoke.go‎

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,53 @@ package polywrap
22

33
import "unsafe"
44

5-
//go:wasm-module w3
6-
//export __w3_subinvoke
7-
func __w3_subinvoke(uriPtr, uriLen, modulePtr, moduleLen, methodPtr, methodLen, inputPtr, inputLen uint32)
5+
//go:wasm-module wrap
6+
//export __wrap_subinvoke
7+
func __wrap_subinvoke(uriPtr, uriLen, methodPtr, methodLen, argsPtr, argsLen uint32) bool
88

9-
func W3Subinvoke(uri, module, method string, input []byte) {
9+
// Subinvoke Result
10+
11+
//go:wasm-module wrap
12+
//export __wrap_subinvoke_result_len
13+
func __wrap_subinvoke_result_len() uint32
14+
15+
//go:wasm-module wrap
16+
//export __wrap_subinvoke_result
17+
func __wrap_subinvoke_result(ptr uint32)
18+
19+
// Subinvoke Error
20+
21+
//go:wasm-module wrap
22+
//export __wrap_subinvoke_error_len
23+
func __wrap_subinvoke_error_len() uint32
24+
25+
//go:wasm-module wrap
26+
//export __wrap_subinvoke_error
27+
func __wrap_subinvoke_error(ptr uint32)
28+
29+
func WrapSubinvoke(uri, method string, args []byte) {
1030
uriPtr := unsafe.Pointer(&uri)
11-
modulePtr := unsafe.Pointer(&module)
1231
methodPtr := unsafe.Pointer(&method)
13-
inputPtr := unsafe.Pointer(&input)
32+
argsPtr := unsafe.Pointer(&args)
33+
34+
result := __wrap_subinvoke(*(*uint32)(uriPtr), uint32(len(uri)), *(*uint32)(methodPtr), uint32(len(method)),
35+
*(*uint32)(argsPtr), uint32(len(args)))
36+
37+
if !result {
38+
errorLen := __wrap_subinvoke_error_len()
39+
errorBuf := make([]byte, errorLen)
40+
errorPtr := unsafe.Pointer(&errorBuf)
41+
42+
__wrap_subinvoke_error(*(*uint32)(errorPtr))
43+
44+
// TODO return Result.Err
45+
}
46+
47+
resultLen := __wrap_subinvoke_result_len()
48+
resultBuf := make([]byte, resultLen)
49+
resultPtr := unsafe.Pointer(&resultBuf)
50+
51+
__wrap_subinvoke_result(*(*uint32)(resultPtr))
1452

15-
__w3_subinvoke(*(*uint32)(uriPtr), uint32(len(uri)), *(*uint32)(modulePtr), uint32(len(module)),
16-
*(*uint32)(methodPtr), uint32(len(method)), *(*uint32)(inputPtr), uint32(len(input)))
53+
// TODO return Result.Ok
1754
}

0 commit comments

Comments
 (0)